我意識到這個問題已被問及一百萬次,並有大量的文件。但是,我無法以正確的格式輸出結果。寫輸出到CSV文件[以正確的格式]
下面的代碼獲得通過從:Replacing empty csv column values with a zero
# Save below script as RepEmptyCells.py
# Add #!/usr/bin/python to script
# Make executable by chmod +x prior to running the script on desired .csv file
# Below code will look through your .csv file and replace empty spaces with 0s
# This can be particularly useful for genetic distance matrices
import csv
import sys
reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
for i, x in enumerate(row):
if len(x)< 1:
x = row[i] = 0
print(','.join(int(x) for x in row))
目前,以獲得正確輸出的.csv文件[即在正確的格式]可以在bash運行以下命令:
#After making the script executable
./RepEmptyCells.py input.csv > output.csv # this produces the correct output
我試着使用csv.writer
函數來產生正確格式化output.csv
文件(類似於./RepEmptyCells.py input.csv > output.csv
)沒有多少運氣。
我想了解如何將這最後一部分添加到代碼來自動執行該過程,而無需在bash中執行此操作。
我曾嘗試:
f = open(output2.csv, 'w')
import csv
import sys
reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
for i, x in enumerate(row):
if len(x)< 1:
x = row[i] = 0
f.write(','.join(int(x) for x in row))
f.close()
當從這個代碼和前一個原始文件看,它們看起來是一樣的。
但是,當我用excel或iNumbers打開它們時,後者(即output2.csv
)只顯示一行數據。
重要的是,output.csv
和output2.csv
都可以在excel中打開。
感謝。那樣做了!所以你只需要添加新行('/ n')! 1)的作品。 2)仍然沒有,但沒關係。 – Novice
請注意,我很驚訝1)的工作,因爲在Unix上'\ n'會轉換爲LF,而我非常確定Excel只會在CRLF結束時接受csv文件。實際上,這是CSV格式的一個特性,單個LF表示單元格內的換行符。這就是爲什麼你打開Python 2的'rb'和Python 3的'newline =''的原因,因爲csv編寫器處理這個特定的方面,並且會被Python的默認換行抽象打擾。 – Cilyan