0

这可能又是一个非常简单的问题;我有一个 .txt 文件中的文件名列表。我想编写一个脚本,分别获取每个文件名并从目录中获取它。但我似乎无法拆分文件名。出现错误提示“文件名太长”,它试图将所有文件名放在一起。我试过这个:

#lots of other stuff

resultsdir1 = "/home/blah"

barcodefile1=sys.argv[1]
barcodes1 = [f.split("/")[0] for f in open(barcodefile1)]

#blahblah

for bc in barcodes1:
    file=open(resultsdir1+"/"+bc+".csv")

我对编程还是很陌生,所以如果我犯了一个非常愚蠢的错误,请保持温柔。脚本中还有很多其他的东西,我真的只想知道如何拆分barcodefile1(它是一个.txt 文件)中的名称。我会很感激任何帮助!

错误信息:文件名太长。然后是由 \t 分隔的文件的所有名称

4

2 回答 2

0

这个例子怎么样:

import os
import csv

ROOT_DIR = '/home/blah'
with open('list-of-file-names.txt') as f:
   for line in f:
      filename = "{}.csv".format(line.strip())
      with open(os.path.join(ROOT_DIR,filename)) as the_file:
          reader = csv.reader(the_file)
          for row in reader:
              print row

当您说“从目录中获取它”时,不清楚您的意思是什么,所以我假设您的意思是“打开它并阅读内容”,这就是上面的代码所做的。

于 2013-06-04T04:33:33.187 回答
0

错误信息:文件名太长。然后是由 \t 分隔的文件的所有名称

我认为您文件中的所有文件名barcodefile1都是制表符分隔的。尝试以下类似的方法来阅读此类制表符分隔的条目。这假定文件中的所有条目都是制表符分隔的,并且在一行中。它还假设您的行非常大,因此尝试分块读取文件。

>>> f = open('try.txt')
>>> left_over=''
>>> all_entries=[]
>>> def read_f():
...     return f.read(80)     #For very large files, you will be better off setting this to 1024 or multiples
... 
>>> for piece in iter(read_f,''): 
...     new_piece = left_over + piece.rstrip('\n')
...     new_piece_split = new_piece.split('\t')
...     all_entries.extend(new_piece_split[:-1])
...     left_over = new_piece_split[-1]
>>> all_entries.append(left_over)
>>> all_entries = filter(None, all_entries)
>>> f.close()

这将读取您的制表符分隔文件(即使它太大)并创建一个新列表all_entries。这类似于您的列表barcodes1

于 2013-06-04T04:26:42.337 回答