【发布时间】:2014-10-30 00:41:11
【问题描述】:
我对 python 很陌生。假设我在一个(非常大的)分隔文本文件中有数据,如下所示:
a|b|c|d|e
1|.|.|-|.
1.2|2.6|||1.7
由于文本文件很大,我想逐行读取和写入。我想用字符串NA 替换.、- 或空的单元格。这是我尝试过的:
import csv
f = open('sample1_fixed.txt','wb')
targets1, new1 = ['|.|','|-|','||','| |'], '|NA|'
for line in open('sample1.txt', 'rb'):
for target in targets1:
if target in line:
line = line.replace(target,new1)
for target in targets1:
if target in line:
line = line.replace(target,new1)
f.write(line + "\n")
f.close()
但我认为必须有更好的方法,使用分隔符?此外,此解决方案不会在行的结尾和开头提取实例。有更好的程序员的想法吗?
预期输出:
a|b|c|d|e
1|不适用|不适用|不适用|不适用
1.2|2.6|NA|NA|1.7
我也尝试过使用 csv 模块和正则表达式:
import csv
import re
f=open('sample1_fixed.txt','wb')
with open('sample1.txt','rb') as inputfile:
read=csv.reader(inputfile, delimiter='|')
for row in read:
text = row[1]
text = re.sub(r'^\.$','NA',text)
text = re.sub(r'^-$','NA',text)
f.write(text + '\n')
f.close()
但这只允许我一次写一列,我不确定如何将它们全部放在输出中...
【问题讨论】:
-
上述输入的预期输出是什么?
-
你看过内置的csv模块吗?您可以指定自定义分隔符。
-
一种方法是使用带有自定义分隔符 ='|' 的 csv.reader 和 replace_NAs() 的辅助函数。我只是注意到你想要替换 NA。