我使用python合并了许多CSV文件。
我使用此代码查找CSV文件:
with open('C:\TODAY.csv', 'w') as f_obj:
rows = []
files = os.listdir('C:\RAW\\')
然后我使用以下方法遍历文件并创建行列表:
for f in files:
if fnmatch.fnmatch(f, '*.csv') and not fnmatch.fnmatch(f, 'TODAY.CSV'):
print f
rows.append(open(f).readlines())
为了调试,我添加了print f
。
这是怎么回事:
我在尝试执行results1.csv
函数时遇到rows.append
不存在的错误,但print f
确实打印results1.csv
因此它必须存在,并且python知道它存在是因为它可以打印文件名。
那么为什么,如果python可以打印文件名,python是否会在下一行说它不存在?
追溯是:
Traceback (most recent call last):
File "Exc.py", line 22, in <module>
rows.append(open(f).readlines())
IOError: [Errno 2] No such file or directory: 'result1.csv
答案 0 :(得分:3)
os.listdir
提供了文件名称的列表,而不是文件路径。仅当您的程序的当前目录已经是您要列出的目录时,文件名才可用于打开文件。
使用os.path.join
使用文件名加入目录路径以提供文件路径:
rows.append(open(os.path.join('C:\RAW\\', f)).readlines())
答案 1 :(得分:0)
参考https://docs.python.org/2/library/fnmatch.html
fnmatch仅告诉您给定的文件名是否与给定的模式匹配, NOT 是否实际存在具有该名称的文件。
试试这个:
for f in files:
if fnmatch.fnmatch(f, '*.csv') and not fnmatch.fnmatch(f, 'TODAY.CSV'):
print f
try:
rows.append(open(f).readlines())
except IOError:
print "File didn't exist, skipping"