2012-06-25 89 views
1

我有一個Django視圖,它讀取CSV文件並將其保存到模型中。Python刪除CSV文件末尾的空格

views.py

def csv_upload(request): 
    ... 
    file = request.FILES['attach'] 
    reader = csv.reader(file, delimiter=';') 
    next(reader) # skip headers 

    for line in reader: 
     ... # process and save 

EDIT

回溯:

File "/home/sam/django-projects/datazone/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/sam/django-projects/datazone/bin/datazone/climate/views.py" in climate_upload 
258.     report.year = line[1] 

Exception Type: IndexError at /climate/upload/ 
Exception Value: list index out of range 

END EDIT

雖然使用文件變體進行測試,但我注意到如果文件中有尾隨空格(例如由於保存表單Excel空行)我得到一個Index out of range錯誤。

我的問題是,我如何從文件的末尾(可能剛剛開始)確定文件的空白。

任何幫助非常感謝。

+0

你能張貼您收到的確切追蹤的? – dm03514

+0

增加了回溯。 –

回答

1

如果我的理解是正確的,你要照顧一些空白線路中的文件的結尾,對不對?

for line in reader: 
    if line: 
     ... # process and save 

感謝@ dm03514在我原來的答覆指出一個錯誤

+0

這對我有用:'if''.join(line)=='':continue'。使用此解決方案有任何問題嗎? –

+0

@DarwinTech是的,這將工作。或者,你可以使用我更新後的答案,這更簡潔我猜 – xvatar

+0

這是不必要的,你可以調用一個函數,當你可以檢查線是否爲空? '如果行:'? – dm03514

0
+1

,這給了我'列表'對象沒有屬性'strip'' –

+0

是的,行是一個列表,而不是一個字符串。如果你使用整個列表作爲參數,你可以創建一個strip_list函數。 –

0

線是一個列表,而不是一個字符串。如果您將整個列表作爲參數傳遞,則可以創建strip_list函數。

def strip_list(my_list): 
    for index, string in enumerate(my_list): 
     try: my_list[index] = string.strip() 
     # In case it's not a string 
     except AttributeError: pass 
    return my_list 

for line in reader: 
    line = strip_list(line) 

或者您可以在使用它時去掉每個物品。

line[0].strip() 
+0

'line [0] .strip()'不能解決他的問題,它會引起同樣的錯誤; – dm03514

2

line將成爲一個列表。你不能剝奪它。如果它是一個空列表,這意味着它是你的文件中的空行。請檢查行中是否有元素。一個空行不會有任何列表元素。

相反剝離線你可以檢查該行有效if line: