我想要做的實際上就像標題中所寫的那樣。
with open(path, "r ", newline='') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
list_of_column_names = []
num_cols = len(next(csv_reader))
for i in range(num_cols):
list_of_column_names.append(i)
fields = list_of_column_names
with open(example.csv, "r ", newline='') as writeFile:
csvwriter = csv.DictWriter(writeFile, delimiter=',', lineterminator='\n', fieldnames=fields)
writeFile.seek(0, 0)
csvwriter.writeheader()
我想列舉最初沒有任何列名的列。但是當我運行代碼時,它替換了第一行中的資料。例如:
示例.csv:
a,b
c,d
e,f
我想要的是:
0,1
a,b
c,d
e,f
運行代碼后會發生什么:
0,1
c,d
e,f
有沒有辦法防止這種情況發生?
uj5u.com熱心網友回復:
沒有什么神奇的方法可以將一行插入到現有的文本檔案中。
以下是我的想法,您的代碼已經進行了第 2-4 步。另外,我不會與DictWriter 混為一談,因為您沒有嘗試將 Python dict 轉換為 CSV(我可以看到您使用它來撰寫標題,但這對于常規讀取器/寫入器來說很容易):
- 打開一個新檔案進行寫入
- 讀取 CSV 的第一行
- 將列索引解釋為標題
- 寫標題
- 寫第一行
- 讀/寫其余的行
- 將新檔案移回舊檔案,覆寫(未顯示)
這是代碼中的樣子:
import csv
with open('output.csv', 'w', newline='') as out_f:
writer = csv.writer(out_f)
with open('input.csv', newline='') as in_f:
reader = csv.reader(in_f)
# Read the first row
first_row = next(reader)
# Count the columns in first row; equivalent to your `for i in range(len(first_row)): ...`
header = [i for i, _ in enumerate(first_row)]
# Write header and first row
writer.writerow(header)
writer.writerow(first_row)
# Write rest of rows
for row in reader:
writer.writerow(row)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400254.html
上一篇:Python3:在不使用熊貓的情況下執行兩個串列串列的“左連接”
下一篇:csv模塊不寫新行
