我有一个导出为TAB分隔的文件,其中有一些包含TAB字符的字符串字段,以便在导入时将列移动。我试图找到一些其他工具来实现此目的的方法(例如,有关使用gawk的解决方案,请参见replace tab in an enclosed string in a tab delimited file linux),但希望能够从python的Jupyter Notebook中做到这一点。
样本数据:
“坏字符串” 1“好字符串” 2“也好”“ 01/01/01”
需要成为
“坏字符串” 1“好字符串”“也很好”“ 01/01/01”
我认为正则表达式是关键,但不够熟练,无法将其快速组合在一起。现在,我正在考虑拆分选项卡,然后评估缺少的字符串,并用引号引起来,然后将它们重新组合在一起的想法,但是这种方法存在一些可能的陷阱。
任何帮助将不胜感激。 谢谢... JP
答案 0 :(得分:0)
以制表符分隔的CSV格式中的字段制表符很不错,只要正确引用该字段即可(在这种情况下,就是这种情况),因此您可以简单地将csv.reader
与将delimiter
参数设置为'\t'
:
from io import StringIO
import csv
f = StringIO('''"bad\tstring"\t1\t"good string"\t2\t"also good"\t"01/01/01"''')
print(list(csv.reader(f, delimiter='\t')))
这将输出:
[['bad\tstring', '1', 'good string', '2', 'also good', '01/01/01']]
如果您仍然坚持用空格替换制表符,则可以通过替换'\t'
生成的输出中的csv.reader
来轻松地做到这一点。
print([[s.replace('\t', ' ') for s in row] for row in csv.reader(f, delimiter='\t')])
这将输出:
[['bad string', '1', 'good string', '2', 'also good', '01/01/01']]
如果需要,可以使用csv.writer.writerows
用它写回CSV。