2017-05-03 76 views
0

在我当前的工作目录中,我运行我的python脚本,我有多个子目录,它们都包含'genes.faa.genespercontig.csv'文件。我想创建这些文件的熊猫数据框。Python错误;使用os.walk找不到文件

当我运行我的脚本,我得到的错误:

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\KLIF\\Documents\\Linda\\genes.faa.genespercontig.csv\\r' 

我的脚本如下:

import os 
import pandas as pd 

for root, dirs, files in os.walk(os.getcwd()): 
    with open(os.path.join(root, 'genes.faa.genespercontig.csv', 'r')) as f1: 
     df1 = pd.read_csv('f1', header=None, delim_whitespace=True, names = ["contig", "genes"]) 
     print(df1) 

我确信,该​​文件是在德子目录,但为什么蟒蛇找不到?

回答

1

除非“r”是名为“genes.faa.genespercontig.csv”的目录中的文件,否则语法错误很简单。你需要括号稍微调整:

... 
with open(os.path.join(root, 'genes.faa.genespercontig.csv'), 'r') as f1: 
... 

此外,考虑到你说的文件包含子目录内,你可能需要由os.walk函数返回的dirs变量中遍历子目录。我注意到你使用字符串'f1'传递给pd.read_csv,但想必你想要打开的文件对象。喜欢的东西:

import os 
import pandas as pd 

for root, dirs, files in os.walk(os.getcwd()): 
    for subdir in dirs: 
     with open(os.path.join(root,subdir,'genes.faa.genespercontig.csv'),'r') as f1: 
      df1 = pd.read_csv(f1, header=None, delim_whitespace=True, names = ["contig", "genes"]) 
      print(df1) 

要只打开它实际上存在的文件的尝试,使用:

... 
filepath = os.path.join(root,subdir,'genes.faa.genespercontig.csv') 
if os.path.isfile(filepath): 
    with open(filepath, 'r') as f1: 
... 
+0

我调整它,但它仍然给出了错误,它没有找到文件 – Gravel

+0

@Gravel添加更多详情。我不知道你的目录结构,所以未经测试,但已根据你的问题提供的细节 –

+0

是的,这是有效的。非常感谢!如果我需要它;你能否告诉我该怎么做,如果我有一个不包含这个文件的子目录?因为当我遍历子目录时,脚本无法在子目录中找到该文件,它将停止,并且我希望它继续下一个子目录。 – Gravel