将上传的CSV转换为Python列表

2 投票
4 回答
675 浏览
提问于 2025-04-16 13:02

我有一个两列的csv文件,我通过一个HTML页面上传到服务器,然后用一个Python的cgi脚本来处理它。在服务器上查看这个文件时,它看起来像是一长串字符串,比如一个叫做test.csv的文件,内容是这样的:

col1,  col2  
x,y  

变成了

('upfile', 'test.csv', 'col1,col2'\t\r\nx,y') 

第一列包含我想处理的数据(也就是x),第二列包含它的标识符(y)。请问有没有更好的上传方式,还是我需要手动提取我想要的字段?这样做似乎很容易出错。谢谢!

4 个回答

2

看起来你的文件在上传HTML的时候被修改了。有没有什么原因让你不能直接通过FTP上传,把CSV文件放到需要的地方呢?

一旦CSV文件整理好了,这里有一个简单的函数,可以把它放进一个二维数组里:

def genTableFrCsv(incsv):
    table = []
    fin = open(incsv, 'rb')
    reader = csv.reader(fin)
    for row in reader: 
        table.append(row)
    fin.close()
    return table

这样你就可以在内存中对整个列表进行操作,而不是像Vitor的解决方案那样一部分一部分地从文件中提取数据。

3

你不能用csv模块来解析这个吗?这肯定比自己写代码要好。

可以参考下面这样的写法:

import csv
import cgi

form = cgi.FieldStorage()
thefile = form['upfile']

reader = csv.reader(thefile, delimiter=',')
for row in reader:
  for field in row:
    doThing()

编辑:我在这里纠正一下我之前的回答,参考了下面的ars的回答。

4

如果你在用Python的cgi模块,你可以这样做:

form = cgi.FieldStorage()
thefile = form['upfile']

reader = csv.reader(thefile.file)
header = reader.next() # list of column names
for row in reader:
    # row is a list of fields
    process_row(row)

比如,你可以看看这个网站,里面有关于cgi编程的内容,或者查看Python的cgi模块的文档。

撰写回答