文件不存在,但python是否打印文件名?

时间:2014-09-15 09:53:05

标签: python csv

我使用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

2 个答案:

答案 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"