【问题标题】:How to turn a txt file to csv如何将txt文件转成csv
【发布时间】:2016-07-28 04:33:46
【问题描述】:

我有一个 txt 文件,它有 214 列(数据由空格分隔)和大约一百万行。

我想把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 列。我确信这很简单,但我正在努力研究如何去做

【问题讨论】:

  • 为什么csv.writer中的分隔符为' '
  • 因为我认为 delimiter 是在询问是什么分隔了我的数据...它是一个空格...所以我放了一个空格 :-D
  • 啊...不,对于csv.writer,这就是输出中将使用的分隔符。它根据您传递给writerowwriterows 的内容获取字段(对于普通作家来说,这只是writerows 的列表或列表)
  • readerdelimiter 必须与您当前的格式匹配,而writerdelimiter 应该是您想要的格式。 writer 永远不会与原始 csv 一起使用,这就是拥有单独的 reader 的意义所在。

标签: python csv


【解决方案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)

【讨论】:

  • 谢谢Miyagi先生,我认为这有效!我无法打开它,因为它太大了,所以它似乎有效,至少我现在应该可以删除一些列 - 干杯:)
  • @JacintaTonkin 查看有关如何删除列的添加说明。
【解决方案2】:

你必须改变

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)

因为你希望你的作家使用';'作为生成的 csv 文件中的分隔符。 对于删除列,我认为除了在 for 循环中迭代它们并仅在当前列不是其中之一时才写入当前列。

例如:

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

【讨论】:

  • 我认为您正在 for 循环中寻找类似 @​​987654324@ 的内容。
猜你喜欢
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多