2011-07-22 91 views
2

我有以下代碼:類型錯誤:預期的字符緩衝區對象

import os 
import csv 


listing = os.listdir('/directory/my/files/are/in') 
os.chdir('/directory/my/files/are/in') 

for file in listing[1:]: 
    r = csv.reader(open(file, 'rU')) 

    for row in r: 
     stuff = [str.split('\t', 1) for row in r] 
     print stuff 

返回TypeError: expected a character buffer object。我該如何解決?基本上,我想在目錄中打開所有文件(CSV),然後從每個細胞切出一定的垃圾(後一切,包括/噸)。

+0

爲什麼你不想處理'listing [0]'? –

回答

1
import os 
import csv 

listing = os.listdir('/directory/my/files/are/in') 
os.chdir('/directory/my/files/are/in') 

for file in listing[1:]: 
    if os.path.isdir(file): 
     continue 
    with open(file, 'rU') as csvfile: 
     for row in csv.reader(csvfile, delimiter='\t'): 
      print row 
      #now you can extract data from the row 

這修復了幾個問題。

首先,您需要確保每個要打開的文件實際上是一個文件,而不是一個目錄。

二,csv.reader可以使用製表符作爲分隔符。這意味着你不需要使用split

第三,這個版本實際上關閉了文件。

+0

太棒了!謝謝!! – user808545

2

str.split('\t', 1)'\t'.split(1)等同,它試圖通過分割字符串'\t'非字符串1,失敗。目前還不完全清楚你期望做什麼:你正在迭代r,然後在這個循環的主體中,你又重複了r(在列表理解中)。你是否意味着要做這樣的事情?

for row in r: 
    stuff = [item.split('\t', 1) for item in row] 
    print stuff 

(仍然不會使意義,但至少它的東西。)

相關問題