1

我有一个 Django 视图,它读取 CSV 文件并将其保存到模型中。

视图.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

编辑

追溯:

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

结束编辑

在使用文件变体进行测试时,我注意到如果文件中有尾随空格(例如,由于保存表单 Excel 导致空行),我会收到Index out of range错误消息。

我的问题是,我怎样才能从文件的末尾(并且可能只是为了确定)的开头去掉空格。

非常感谢任何帮助。

4

4 回答 4

2

line将是一个列表。你不能剥离它。如果它是一个空列表,则意味着它是文件中的空行。只需检查行中是否包含元素。空行将没有任何列表元素。

而不是剥离线,您只需检查该线是否有效if line:

于 2012-06-25T19:04:37.383 回答
1

如果我的理解是正确的,您想处理文件末尾的一些空白行,对吗?

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

感谢@dm03514 指出我原始答案中的错误

于 2012-06-25T16:39:33.503 回答
0

你试过了line.strip()吗?

http://docs.python.org/library/stdtypes.html

于 2012-06-25T16:30:07.303 回答
0

Line 是一个列表,而不是一个字符串。如果您将整个列表作为参数传递,您可以创建一个 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()
于 2012-06-25T17:04:36.597 回答