我想要做的实际上就像标题中所写的那样。
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)
0 评论