Python 使用app engine正确解析FTP服务器中的CSV文件
我正在尝试从FTP服务器读取CSV文件,并在app engine上解析它。 我可以访问文件并将其读取到Python 使用app engine正确解析FTP服务器中的CSV文件,python,google-app-engine,csv,ftp,ftplib,Python,Google App Engine,Csv,Ftp,Ftplib,我正在尝试从FTP服务器读取CSV文件,并在app engine上解析它。 我可以访问文件并将其读取到StringIO,但当我尝试在文件行上循环时,它只是在每个字符上循环,而不是在行上循环。不确定我做错了什么: ftp = FTP('ftp.mydomain.com', 'username', 'pwd') ftp.set_pasv(True) r = StringIO() ftp.retrbinary('RETR test.csv', r.write) csvfile = csv.reade
StringIO
,但当我尝试在文件行上循环时,它只是在每个字符上循环,而不是在行上循环。不确定我做错了什么:
ftp = FTP('ftp.mydomain.com', 'username', 'pwd')
ftp.set_pasv(True)
r = StringIO()
ftp.retrbinary('RETR test.csv', r.write)
csvfile = csv.reader(r.getvalue(), delimiter=',')
for line in csvfile:
print line
结果是这样的:
['O']
['R']
['D']
['E']
['R']
['N']
['O']
['', '']
['O']
['R']
['D']
['E']
['R']
['D']
['A']
['T']
['E']
['', '']
['I']
['N']
['V']
['O']
['I']
['C']
['E']
['N']
['O']
['', '']
...
要做到这一点并正确地从FTP解析文件,以便
csv
模块能够正确地读取文件,正确的方法是什么?在换行符上拆分长字符串csv.reader()
需要一个iterable,每次迭代生成一行。给它一个字符串,迭代是在单个字符上进行的,然后:
csvfile = csv.reader(r.getvalue().splitlines(), delimiter=',')
您不会显示如何导入StringIO()
。如果是python版本(来自StringIO导入StringIO
),您可以简单地返回到开始并直接传递:
对于Python 3.x和csv.DictReader:
bio = io.BytesIO()
resp = ftp.retrbinary("RETR " + filename, bio.write)
bio.seek(0)
csv_data = csv.DictReader(io.TextIOWrapper(bio, newline=None), delimiter=',')
for row in data:
...
我花了一段时间才找到这个解决方案,所以我现在发布它。我找到的答案并没有解决以一种能让DictReader
高兴的方式保存数据的问题
如果您不关心DictReader
,以下可能会解决:
sio = io.StringIO()
resp = ftp.retrlines("RETR " + filename, sio.write)
sio.seek(0)
不是因为Python3StringIO
不接受二进制,所以您需要retrline
sio = io.StringIO()
resp = ftp.retrlines("RETR " + filename, sio.write)
sio.seek(0)