2016-07-28 83 views
0

我有一個txt文件,它有214列(數據以空格分隔)和大約50萬行。如何將一個txt文件轉換爲csv

我想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文件,在第一A列excel ...我最終希望能夠將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

爲什麼你有分隔符爲'」「'在'csv.writer'? – mgilson

+0

因爲我認爲分隔符問的是什麼在分離我的數據......並且它是一個空格......所以我放了一個空格:-D –

+0

啊......不,對於'csv.writer',這就是分隔符用於輸出。它取決於你傳遞給'writerow'或'writerows'的字段(對於一個香草寫作者來說,它只是一個列表或''writer'列表的列表) – mgilson

回答

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) 

,因爲你希望你的作家用「; 「作爲生成的csv文件中的分隔符。 對於刪除列,除了在for循環中遍歷它們以外,沒有其他辦法可以看到,只有當它不是其中之一時才寫入當前列。

例如:

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

我想你正在for循環中尋找類似'enumerate'的東西。 – MisterMiyagi

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) 
+0

謝謝MrMiyagi我認爲這工作!我無法打開它,因爲它太大了,所以它似乎已經工作了,至少我現在應該可以刪除一些列 - 歡呼:) –

+0

@JacintaTonkin請參閱關於如何刪除列的註釋。 – MisterMiyagi