我有一个包含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
列。我确信这很简单,但是我想把头发拉出来试图弄清楚怎么做
答案 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()