2016-10-04 51 views
0

我是新来的python,但我无法阅读一个文本文件,其中包含由“|”分隔的数据作为分隔符。我如何将文件分成CSV格式的列。Python |分隔文本文件为CSV格式

import csv 
my_file_name = "NVG.txt" 
cleaned_file = "cleanNVG.csv" 

with open(my_file_name, 'r') as infile, open(cleaned_file, 'w') as outfile: 
    data = infile.read() 

    data = data.replace("|","") 
    outfile.write(data) 

此代码摆脱了|为空,但所有数据现在只在一列中。我如何正确格式化? 我很感激你的帮助。

+2

为什么要删除|?你为什么不告诉'csv'这是你的分隔符?即'csv.reader(infile,delimiter ='|')' – FamousJameous

回答

5

csv module可以读取与几乎任意分隔符的CSV文件。

with open(my_file_name, 'r', newline='') as infile: 
    for line in csv.reader(infile, delimiter='|'): 
     # do stuff 

如果你真的想重新格式化文件,你可以使用csv.writer直接:

with open(my_file_name, 'r', newline='') as infile, open(cleaned_file, 'w', newline='') as outfile: 
    writer = csv.writer(outfile) 
    for line in csv.reader(infile, delimiter='|'): 
     writer.writerow(line) 

请注意,你的方法是行不通的,因为你删除的分离,而不是取代它。 data.replace("|","")将用空字符串替换每个|,即"foo|bar"变为"foobar"。您必须用新的替换旧的分隔符,例如data.replace("|", ",")

+0

哦,好吧!谢谢!数据现在在它们的列中,但之后会留下空行。所以第一行有数据,第二行是空白的,第三行有数据,第四行是空白的,等等....为什么这样做? – Cesar

+0

@Cesar将* writer *对象定义为'writer = csv.writer(outfile,lineterminator =“\ n”)' –

+0

实际上没关系,** newline =''**被搞砸了。这工作完美! – Cesar

1

你的代码最简单的方法是将“|”用“,”而不是删除“|”

data = data.replace("|", ",") 
1

要导入的csv模块,但不使用它。利用csv.reader

with open(my_file_name, 'r') as infile, open(cleaned_file, 'w') as outfile: 
    reader = csv.reader(infile, delimiter='|') 
相关问题