从带有应用程序引擎的FTP服务器正确解析CSV文件

asc*_*d00 5 python csv ftp google-app-engine 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.reader(r.getvalue(), delimiter=',')

for line in csvfile: 
    print line
Run Code Online (Sandbox Code Playgroud)

最终结果如下:

['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']
['', '']
...
Run Code Online (Sandbox Code Playgroud)

正确执行此操作并从FTP正确解析文件以便csv模块可以正确读取文件的正确方法是什么?

Mar*_*ers 4

在换行符上分割长字符串;csv.reader()需要一个iterable,其中每次迭代都会产生一行。您给它一个字符串,迭代是针对单个字符的:

csvfile = csv.reader(r.getvalue().splitlines(), delimiter=',')
Run Code Online (Sandbox Code Playgroud)

您没有显示如何StringIO()导入。如果是python 版本( from StringIO import StringIO),您可以简单地返回到开头并直接将其传入:

r.seek(0)
csvfile = csv.reader(r, delimiter=',')
Run Code Online (Sandbox Code Playgroud)