如何将txt文件转换为csv

时间:2016-07-28 04:33:47

标签: python csv

我有一个包含214列的txt文件(数据用空格分隔)和大约五十万行。

我想将txt转换为csv,并使用了以下代码:

import csv

txt_file = r"myfile.txt"
csv_file = r"myfile.csv"

in_txt = csv.reader(open(txt_file, "r"), delimiter = " ", quotechar=" ")
out_csv = csv.writer(open(csv_file, 'w', newline='\n'),delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL)

out_csv.writerows(in_txt)

但是这会将我的数据导出到一个csv文件中,其中所有列都以空格分隔,在excel的第一个A列中...我最终希望能够将txt转换为csv并在此过程中删除10th-48th, 50-61, 65, 67, 68, 71-75, 77, 78, 80-88, 91, 93, 96-100, 102, 105-110, 112-114, 116-119, 122-126, 128-134, 136-140, 142-151, 153-155, 160-162, 165-169, 172-173, 175-177, 179-187, 189-196, 198, 199 & 201-214列。我确信这很简单,但是我想把头发拉出来试图弄清楚怎么做

2 个答案:

答案 0 :(得分:1)

您必须将writer的分隔符设置为逗号。

import csv

txt_file = r"myfile.txt"
csv_file = r"myfile.csv"

in_txt = csv.reader(open(txt_file, "r"), delimiter = " ", quotechar=" ")
out_csv = csv.writer(open(csv_file, 'w', newline='\n'),delimiter=',', quotechar=' ', quoting=csv.QUOTE_MINIMAL)
                                                   # changed this ^

out_csv.writerows(in_txt)

至于删除列,您可以为每行删除它们。生成器表达式允许您修改每一行而不必一次加载所有行

cleaned_column_iter = (line[0:10] + line [49:50] + line [62:65] for line in txt)
                                # add more elements as desired ^
out_csv.writerows(cleaned_column_iter)

答案 1 :(得分:0)

你必须改变

out_csv = csv.writer(open(csv_file, 'w', newline='\n'),delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL)

out_csv = csv.writer(open(csv_file, 'w', newline='\n'),delimiter=';', quotechar=' ', quoting=csv.QUOTE_MINIMAL)

因为您希望您的作家使用&#39 ;;'作为生成的csv文件中的分隔符。 为了删除列,除了在for循环中迭代它们之外我没有别的办法,如果它不是其中之一,那么只写当前列。

例如:

first_row = next(in_read);    
for x in range(0, length(first_row)):
    if x not 10:
       write()