2013-06-03 58 views
0

這可能是一個非常簡單的問題;我有一個.txt文件中的文件名列表。我想編寫一個腳本,分別獲取每個文件名並從目錄中獲取它。但我似乎無法拆分文件名。有一個錯誤說'文件名太長',它試圖把所有的文件名一起。我試過這個:Python:分割文件名列表

#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分隔的文件的所有名稱

+3

你能編輯你的文章,包括整個回溯(整個錯誤信息)嗎? – mgilson

+1

查看如何使用腳本的示例也可能有所幫助。 –

+1

另外,文本文件中的文件格式是什麼?我很好奇你爲什麼在每個文件名上運行'f.split('/')[0]'。 – SethMMorton

回答

0

錯誤消息:文件名太長。然後由\分隔的文件 的牛逼

一個所有的名字,我認爲在你的文件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

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 

它不清楚你是什麼意思時,你說:「從目錄中得到它」,所以我假設你的意思是「打開並閱讀內容「,這就是上面的代碼所做的。