我有一个“坏”标签分隔文件,我需要清理。问题在于字段可能包含换行符。我认为解决这个问题的最简单方法是用某种替换字符替换“错误”的换行符,例如空格。现在我可以设想一种方法来做到这一点,如果一条线上应该有n个字段就是(伪代码)
var line = read n-1 fields ending in a tab, and then until the end of line
line.replace("\n", " ")
line.replace("\r", " ")
write line to output
现在这些文件非常庞大,并且不能选择它们。这是一种合理的方法吗? (我知道这会在最后一场比赛中超越阵容,但我愿意接受这一点) 什么是阅读足够数据的好方法?我不在乎它使用哪种语言,但更喜欢.net,perl或python2,因为我有可用的运行时。
答案 0 :(得分:1)
Python解决方案:
csv_filename = 'foo.csv'
new_csv_filename = 'foo.fixed.csv'
num_fields = 10
with open(csv_filename, 'rU') as reader and open(new_csv_filename, 'w') as writer:
while True:
line = ''
while len(line.split('\t')) < num_fields:
line += reader.readline().replace('\n', ' ')
writer.write(line + '\n') # Or '\r\n' if you prefer
我不会自动替换文件;确保你保留原件。
答案 1 :(得分:1)
你可以用一个非常快速的awk脚本来做到这一点:
awk -F\t '{while(NF < (numberoffields) { line=$0; getline; $0 = line $0;} print}'
答案 2 :(得分:0)
我不确定这是否是提出这个问题的正确论坛,但你需要像TextWrangler这样的文本编辑器程序(适用于Mac OSX)。这可以处理大型数据集,并进行一些非常复杂的搜索和替换。
我猜必须有一个与PC等效的程序。
CSV文件基本上是一天结束时的文本文件,因此您需要将驴工作从问题中解脱出来。