这可能是一个非常简单的问题;我在.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
分隔的文件的所有名称答案 0 :(得分: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
答案 1 :(得分: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
当你说"从目录"中获取它时,你的意思并不清楚,所以我认为你的意思是打开它并阅读内容",这就是上面的代码确实