在制表符分隔的文件Python中的替换字符串中替换制表符

时间:2019-02-22 15:26:50

标签: python

我有一个导出为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

1 个答案:

答案 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。