将实际文件添加到列表中,而不仅仅是文件的字符串名称

时间:2016-04-20 16:18:10

标签: python python-2.7

由于python认为有以下事实,我在阅读我要打开的文件内容时遇到问题:

  

"没有这样的文件或目录:' Filename.xrf'"

以下是我的代码概述以及我认为问题可能是:

  1. 用户的输入定义了文件所在的路径。

    direct = str(raw_input("Enter directory name where your data is: ))           
    path = "/Users/myname/Desktop/heasoft/XRF_data/%s/40_keV" \
                                                  %(direct)
    print os.listdir(path)
    # This lists the correct contents of the directory that I wanted it to.
    
  2. 所以在这里我基本上让用户决定他们想要操作哪个目录,然后再选择一个名为" 40_keV"的目录路径。

    1. 在定义的函数中,我使用OS模块导航到相应的目录,然后将40_keV目录中的每个文件追加到名为dataFiles的列表中。

      def Spectrumdivide():
           dataFiles = []
           for root, dirs, files in os.walk(path):
               for file in files:
                   if file.endswith('.xrf'):
                       dataFiles.append(file)
      
    2. 此处,正确的文件已附加到列表&{39; dataFiles',但我认为这可能是问题发生的地方。我不确定Python是否正在将文件的名称添加到我的列表而不是实际的文件对象。

      1. 代码中断是因为python认为没有这样的文件或目录。

        for filename in dataFiles:
            print filename
            f = open(filename,'r')    # <- THE CODE BREAKS HERE
            print "Opening file: " + filename
            line_num = f.readlines()
        
      2. 同样,在循环的第一次迭代中从dataFiles [0]打印正确的文件,但随后产生了这个常见错误:

        IOError: [Errno 2] No such file or directory: '40keV_1.xrf'
        

        我使用Anaconda启动器来运行Spyder (Python 2.7),文件是包含两列长度相等的文本文件。目标是将每列分配到列表中并相应地操作它们。

1 个答案:

答案 0 :(得分:2)

您需要使用os.path.join函数附加路径名称,而不仅仅是文件的名称。

for root, dirs, files in os.walk(path):
    for file in files:
        if file.endswith('.xrf'):
            dataFiles.append(os.path.join(root, file))