为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

子衿沉夜 2021-11-16 16:32:20
我有一个导出为 TAB 分隔的文件,其中包含一些包含 TAB 字符的字符串字段,因此在导入时会将列移过来。我试图找到几种使用其他工具执行此操作的方法(例如,请参阅在制表符分隔文件 linux 中替换封闭字符串中的制表符,以获取使用 gawk 的解决方案)但希望能够从我的 Jupyter Notebook 执行此操作使用蟒蛇。样本数据:"badstring"1"good string"2"还不错""01/01/01"需要成为"坏串"1"好串""也不错""01/01/01"我认为正则表达式是关键,但在这方面还不够熟练,无法快速将其整合在一起。现在我的想法是拆分选项卡,然后评估缺少结尾的字符串并开始引号,然后将它们重新连接在一起,但是这种方法可能存在一些陷阱,就像我现在所拥有的那样。任何帮助,将不胜感激。谢谢....JP
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

以制表符分隔的 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'中所产生的输出S 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。


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信