StringIO和csv.readerPython2.7中的问题

2024-03-28 12:31:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用fabric读取远程文件。文件正在下载到StringIO中。因此,对于new,让我们假设文件是本地的:

fd=StringIO('#test=123\nblabla=456').getvalue()

现在我想删除注释并同时更改test的值:

dict(next(csv.reader([item], delimiter='=', quotechar="'")) for item in next(csv.reader([fd], delimiter='\n', quotechar="'")))

我得到了一个错误:

_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

但是如何在通用换行模式下打开文件呢?在

编辑:

所以,我读了StringIO。但我也在改变它:

^{pr2}$

Tags: 文件csvintestnew远程itemreader
1条回答
网友
1楼 · 发布于 2024-03-28 12:31:24

保持在csv标准能力内,不要获取StringIO文件的值。只需倒带并传递给csv.reader

fd=StringIO('#test=123\nblabla=456')

fd.seek(0)   # if the file has been written to
d = dict(next(csv.reader([item], delimiter='=', quotechar="'")) for item in next(csv.reader(fd, delimiter='\n', quotechar="'")))
print(d)

结果:

^{pr2}$

此处不需要fd.seek(0),但如果fd是通过某个调用写入的,则需要使用它:您必须倒带缓冲区才能将其传递给csv.reader

相关问题 更多 >