【发布时间】:2013-03-28 15:15:02
【问题描述】:
如何更改打开stdin 的模式?具体来说,我们将 CSV 文件传送到 python 脚本以清理数据,但数据中的垂直制表符似乎需要处于通用换行符模式。
问题数据似乎是输入流中的一些\x0b 字符。
由 python 打印,在使用 'rU' 打开文件之一后
['P', 'B', '', '1 W Avene, #8\x0bMiami Beach, FL 33139']
['S', 'H', '\x0bElberon, NJ 07740', '9 E Avenue\x0bElberon, NJ 07740']
['C', 'W', 'E R A', '2 B 3rd Floor \x0bNew York NY 10023 ']
['D', 'M', '', '1 K Street, NW\x0bWashington, DC 20005']
['E', 'W', '', '5 P C Lane\x0bDenver, CO 80209-3311']
【问题讨论】:
-
\x0b不是换行符。rU无济于事。 -
'rU' 确实解决了使用内置
open()打开其中一个 CSV 文件时的问题。编辑 Q 以正确引用 '\x0b'。 -
嗯?您的输入中仍然有
\x0b。那么这怎么可能是问题呢?为什么不显示有问题的文件的 hexdump 之类的? -
这是一个很好的问题,我没有答案。我只能告诉你,当
opening 与'r'时,csv 阅读器会抛出"_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?",而当使用'rU'打开文件时,csv 阅读器的行为与预期相同。 -
事实证明,问题在于文件使用
'\r'(CR,又名“经典 mac”换行符)专门作为行终止符,而不是更常见的 LF 或 CRLF。与\x0b无关。