2013-06-18 64 views
1

我有以下代碼:基本上我在做什麼,正在尋找一個.csv文件,它可能位於兩個位置之一(或更依賴) 我有一個文本文件(LocationsFile.txt).打開文件錯誤:TypeError:強制爲Unicode:需要字符串或緩衝區,找到列表

出於此我只想得到該學生特定領域的兩個具體位置:這是SSID Field

我有下面的代碼,但錯誤它似乎給我如下:

Tape Name130322 
['\\\\....HIDDEN FOR Confidenciality .....StudentDB1_av.csv'] 
Success: 
Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__ 
    return self.func(*args) 
    File "C:\Users\Administrator\Desktop\John\Spreadsheet\Gui.py", line 291, in run 
    findStudentData('130322','StudentDB1') 
    File "C:\Users\Administrator\Desktop\John\Spreadsheet\Gui.py", line 62, in findStudentData 
    with open(items) as f: 
TypeError: coercing to Unicode: need string or buffer, list found 

正在執行的代碼如下: - 請在回答時留心體貼,因爲我是'新手'python程序員!

def findStudentData(student_name,course): 
student_name= student_name.lower() 
configfiles = [] 

print "student_name" + student_name 
for path in MMinfo_paths: 
    configfiles.append(glob.glob(path+"/" + course+"*")) 

for items in configfiles: 
    print items 
    print "Success:" 
    heading = True 

    with open(items) as f: 
     content = f.read() 

     if heading == True 
      ssidCol = content.index('ssid') 
      flagsCol = content.index('flags') 
      nameCol = content.index('name') 
      heading = False 
      continue 



     for item in rowData: 
      if rowData.index(item) == nameCol: 
       print rowData 
      else: 
       continue 

非常感謝:-)

+0

縮進是有點過 –

+0

忽略的是一分鐘。 :-) – KingJohnno

+0

請發佈錯誤消息的完整回溯 –

回答

1

items是你的代碼的列表,它應該是一個字符串代替。

glob.glob函數返回一個列表,因此您的configfiles變量是列表的列表。

for items in configfiles: 
    print items  # items is a list here 
    print "Success:" 
    heading = True 

    with open(items) as f: # list instead of string here, is incorrect. 
+0

如果你的列表是單個元素,或者一個外部循環遍歷項目,你可以帶'items [0]'。 – DhruvPathak

2

現在,你configfiles看起來是這樣的:

[[file1, file2], [file3, file4]] 

你可以這樣做:

for items in configfiles: 
    for filename in items: 
     with open(items) as f: ... 

或者,您可以用configfiles.extend取代configfiles.append。 Append將glob返回的列表添加爲configfiles列表的一個元素,而extend則將glob返回的列表的每個元素添加到configfiles列表中。然後,configfiles是:

[file1, file2, file3, file4] 

而且你可以這樣寫:

for items in configfiles: 
    with open(items) as f: ... 
相關問題