python中的路径问题,总是报错

yhy45678 2016-03-30 09:37:50
代码通过遍历文件夹后将路径存储到数组中,这是其中一条数据 ‘C:\\Echo-to-John\\cut-in MF4\\wholedata.xlsx’ ,为什么打开文件时出现 error22的错误
...全文
656 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhy45678 2016-03-31
  • 打赏
  • 举报
回复
引用 14 楼 panghuhu250 的回复:
1. 程序把转义字符转换为内部字符只会发生一回. 所以这儿不需要四个"\", 还是要两个"\".
def filewalk(): # 可以用os.walk
	filepath=[]
	root='C:\\\\Echo-to-John\\\\cut-in MF4'  # 换成\\
	for i in os.listdir(root):
		root2=root+'\\\\'+i  # 用os.path.join
		for j in os.listdir(root2):
			if j == 'wholedata.xlsx':
				filepath.append(root2+'\\\\'+'wholedata.xlsx') # 用os.path.join
	return filepath
. 2. 拼接路径用"os.path.join", 可移植性更好. 不要自己用"/"或"\". 3. 即使需要自己拼, 用os.sep, 不要用"\" 或"/". 4. python提供了遍历文件的函数os.walk.
不好意思,今天又遇到一个问题关于写入excel文件的,代码在下面
table=fileopen.fileopen_wholedata()
	tablecols=table.ncols
	datarol=[]
	datarol.append(table.row_values(0))
	workbook=xlwt.Workbook(encoding = 'ascii')
	worksheet1 = workbook.add_sheet('Sheet1')
	worksheet2 = workbook.add_sheet('Sheet2')
	for i in range(wholeStartTime,wholeEndTime):
		# acquire the rols and write to the file
		data=table.col_values(i)
		
		datarol.append(data)
		
	for i in range(int(wholeEndTime-wholeStartTime)):
		for j in range(tablecols):
			if j<255:
				worksheet1.write(i,j,'1')
			else :
				worksheet2.write(i,j-255,'1')
	pathfind()
	workbook.save('C:\\John-to-Echo\\situation4.xlsx')
前一个for 循环是为了取数据,后一个是为了写数据,写完之后文件创建成功,就是无法打开,提示格式或者扩展有问题,请问是为什么
yhy45678 2016-03-31
  • 打赏
  • 举报
回复
引用 14 楼 panghuhu250 的回复:
1. 程序把转义字符转换为内部字符只会发生一回. 所以这儿不需要四个"\", 还是要两个"\".
def filewalk(): # 可以用os.walk
	filepath=[]
	root='C:\\\\Echo-to-John\\\\cut-in MF4'  # 换成\\
	for i in os.listdir(root):
		root2=root+'\\\\'+i  # 用os.path.join
		for j in os.listdir(root2):
			if j == 'wholedata.xlsx':
				filepath.append(root2+'\\\\'+'wholedata.xlsx') # 用os.path.join
	return filepath
. 2. 拼接路径用"os.path.join", 可移植性更好. 不要自己用"/"或"\". 3. 即使需要自己拼, 用os.sep, 不要用"\" 或"/". 4. python提供了遍历文件的函数os.walk.
好的,谢谢
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
引用 11 楼 bealing 的回复:
[quote=引用 10 楼 yhy45678 的回复:] [quote=引用 8 楼 bealing 的回复:] [quote=引用 7 楼 yhy45678 的回复:] [quote=引用 5 楼 bealing 的回复:] 把 '\' 替换成 '/'
试过了,不行的[/quote] 一般情况下获取的路径应该是C:\Echo-to-John\cut-in MF4\wholedata.xlsx,这样的为什么会是两个'\',这个暂且不说 C:\\Echo-to-John\\cut-in MF4\\wholedata.xlsx 替换成 C:/Echo-to-John/cut-in MF4/wholedata.xlsx 这样难道也不行吗?[/quote] 而且我也 输出了path确定路径是对的 然后就真的不知到是哪出问题了[/quote] 贴代码吧[/quote] 程序入口在fileopen.filewalk()那
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
引用 11 楼 bealing 的回复:
[quote=引用 10 楼 yhy45678 的回复:] [quote=引用 8 楼 bealing 的回复:] [quote=引用 7 楼 yhy45678 的回复:] [quote=引用 5 楼 bealing 的回复:] 把 '\' 替换成 '/'
试过了,不行的[/quote] 一般情况下获取的路径应该是C:\Echo-to-John\cut-in MF4\wholedata.xlsx,这样的为什么会是两个'\',这个暂且不说 C:\\Echo-to-John\\cut-in MF4\\wholedata.xlsx 替换成 C:/Echo-to-John/cut-in MF4/wholedata.xlsx 这样难道也不行吗?[/quote] 而且我也 输出了path确定路径是对的 然后就真的不知到是哪出问题了[/quote] 贴代码吧[/quote]
path=''

def filewalk():
	filepath=[]
	root='C:/Echo-to-John/cut-in MF4'
	for i in os.listdir(root):
		root2=root+'/'+i
		for j in os.listdir(root2):
			if j == 'wholedata.xlsx':
				filepath.append(root2)
	return filepath

def pathset(fileppath):
	
	path=fileppath
	print path
	
def fileopen_wholedata():
	try:
		data=xlrd.open_workbook(path+'/wholedata.xlsx')
		table=data.sheet_by_name('Sheet1')
		return table
	except Exception,e:
		print str(e)
		
def p0_index_find():
	p0_index=[]
	table=fileopen_wholedata()
	p0_index=table.col_values(1)
	return p0_index
path=fileopen.filewalk()
	for i in range(len(path)):
		print path[i]
		fileopen.pathset(path[i])
		if pretreatment.pretreatment1_p0():

def pretreatment1_p0():
	p0_index=fileopen.p0_index_find()
	for i in range(1,len(p0_index)-1):
		if p0_index[i] == 255.0 :
			return False
	
	return True
第一段代码中的两个函数就是fileopen module中的
xSeeker~ 2016-03-30
  • 打赏
  • 举报
回复
引用 10 楼 yhy45678 的回复:
[quote=引用 8 楼 bealing 的回复:] [quote=引用 7 楼 yhy45678 的回复:] [quote=引用 5 楼 bealing 的回复:] 把 '\' 替换成 '/'
试过了,不行的[/quote] 一般情况下获取的路径应该是C:\Echo-to-John\cut-in MF4\wholedata.xlsx,这样的为什么会是两个'\',这个暂且不说 C:\\Echo-to-John\\cut-in MF4\\wholedata.xlsx 替换成 C:/Echo-to-John/cut-in MF4/wholedata.xlsx 这样难道也不行吗?[/quote] 而且我也 输出了path确定路径是对的 然后就真的不知到是哪出问题了[/quote] 贴代码吧
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
引用 8 楼 bealing 的回复:
[quote=引用 7 楼 yhy45678 的回复:] [quote=引用 5 楼 bealing 的回复:] 把 '\' 替换成 '/'
试过了,不行的[/quote] 一般情况下获取的路径应该是C:\Echo-to-John\cut-in MF4\wholedata.xlsx,这样的为什么会是两个'\',这个暂且不说 C:\\Echo-to-John\\cut-in MF4\\wholedata.xlsx 替换成 C:/Echo-to-John/cut-in MF4/wholedata.xlsx 这样难道也不行吗?[/quote] 试过了,path 的类型 也是str,所以找不到问题在哪,我需要读文件中的内容,加不加 r 应该都是可以的吧
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
引用 8 楼 bealing 的回复:
[quote=引用 7 楼 yhy45678 的回复:] [quote=引用 5 楼 bealing 的回复:] 把 '\' 替换成 '/'
试过了,不行的[/quote] 一般情况下获取的路径应该是C:\Echo-to-John\cut-in MF4\wholedata.xlsx,这样的为什么会是两个'\',这个暂且不说 C:\\Echo-to-John\\cut-in MF4\\wholedata.xlsx 替换成 C:/Echo-to-John/cut-in MF4/wholedata.xlsx 这样难道也不行吗?[/quote] 而且我也 输出了path确定路径是对的 然后就真的不知到是哪出问题了
xSeeker~ 2016-03-30
  • 打赏
  • 举报
回复
引用 7 楼 yhy45678 的回复:
[quote=引用 5 楼 bealing 的回复:] 把 '\' 替换成 '/'
试过了,不行的[/quote] 一般情况下获取的路径应该是C:\Echo-to-John\cut-in MF4\wholedata.xlsx,这样的为什么会是两个'\',这个暂且不说 C:\\Echo-to-John\\cut-in MF4\\wholedata.xlsx 替换成 C:/Echo-to-John/cut-in MF4/wholedata.xlsx 这样难道也不行吗?
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
引用 5 楼 bealing 的回复:
把 '\' 替换成 '/'
试过了,不行的
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
没人吗?人呢?
xSeeker~ 2016-03-30
  • 打赏
  • 举报
回复
把 '\' 替换成 '/'
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
引用 2 楼 ramous_13130119 的回复:
在路径前加一个小写的r path = r"C:\Echo-to-John\cut-in MF4\PJ_360_2016-02-26_14-23_0011\wholedata.xlsx"
而且我用的是变量来表示,需要遍历文件夹中的文件,不是给定的路径,没办法在前面加r
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
引用 2 楼 ramous_13130119 的回复:
在路径前加一个小写的r path = r"C:\Echo-to-John\cut-in MF4\PJ_360_2016-02-26_14-23_0011\wholedata.xlsx"
我用两个反斜杠不行吗?
迪卡蛙 2016-03-30
  • 打赏
  • 举报
回复
在路径前加一个小写的r path = r"C:\Echo-to-John\cut-in MF4\PJ_360_2016-02-26_14-23_0011\wholedata.xlsx"
yhy45678 2016-03-30
  • 打赏
  • 举报
回复
def fileopen_wholedata():
	try:
		data=xlrd.open_workbook('C:\\Echo-to-John\\cut-in MF4\\PJ_360_2016-02-26_14-23_0011\\wholedata.xlsx')
		table=data.sheet_by_name('Sheet1')
		return table
	except Exception,e:
		print str(e)
		
这样是可以的,运行正常,但是这样就不对了
def fileopen_wholedata():
	try:
		data=xlrd.open_workbook(path)
		table=data.sheet_by_name('Sheet1')
		return table
	except Exception,e:
		print str(e)
,该怎么改?拼接路径数组代码是这样的
def filewalk():
	filepath=[]
	root='C:\\\\Echo-to-John\\\\cut-in MF4'
	for i in os.listdir(root):
		root2=root+'\\\\'+i
		for j in os.listdir(root2):
			if j == 'wholedata.xlsx':
				filepath.append(root2+'\\\\'+'wholedata.xlsx')
	return filepath
panghuhu250 2016-03-30
  • 打赏
  • 举报
回复
1. 程序把转义字符转换为内部字符只会发生一回. 所以这儿不需要四个"\", 还是要两个"\".
def filewalk(): # 可以用os.walk
	filepath=[]
	root='C:\\\\Echo-to-John\\\\cut-in MF4'  # 换成\\
	for i in os.listdir(root):
		root2=root+'\\\\'+i  # 用os.path.join
		for j in os.listdir(root2):
			if j == 'wholedata.xlsx':
				filepath.append(root2+'\\\\'+'wholedata.xlsx') # 用os.path.join
	return filepath
. 2. 拼接路径用"os.path.join", 可移植性更好. 不要自己用"/"或"\". 3. 即使需要自己拼, 用os.sep, 不要用"\" 或"/". 4. python提供了遍历文件的函数os.walk.

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧