在CSV文件中给单元格前面添加“0”?
具体来说,我有一个大约2000个FIPS代码的列表(例如:“8001007801”),这些代码都在一个CSV文件的单列中。所有这些代码应该以0开头,但Excel默认会把单元格格式化,去掉只包含数字的单元格开头的“0”。我知道在打印时怎么处理,但在写入文件时就不知道该怎么做了。
我需要我的脚本遍历每一行的第一个单元格,在它前面加一个“0”,然后把这一行复制到一个新的输出CSV文件中。以下是我目前的代码:
import csv
inFile = open("FIPS_original.csv", "r")
reader = csv.reader(inFile, delimiter = ";", quotechar = '"')
outFile = open("FIPS_appended.csv", "w")
writer = csv.writer(outFile, delimiter = ";", quotechar = '"')
for row in reader:
outRow = list(row)
outRow[0] = outRow[0].zfill(11)
writer.writerow(outRow)
inFile.close()
outFile.close()
目前这个脚本只是把相同的值复制到输出的CSV文件中,但并没有实际添加“0”。 有没有人能帮忙解决这个问题?如果需要更多信息,请告诉我,提前谢谢大家。
补充说明:我应该提到,当我在Python IDLE中使用打印功能打印我的值时,它们的格式是正确的。我还应该提到,我已经取消了Excel的设置,这个设置会自动把没有字母字符的文本单元格格式化为数字,我也尝试过把两个电子表格中的所有单元格都格式化为数字。
答案:结果确实是Excel的格式问题。即使你禁用了那个自动把只有数字的文本单元格变成数字单元格的选项,改变单元格类型为文本也没有用。你需要做的是自定义格式化你的单元格,以容纳你需要的字符数(如果这一列的所有数字都是不同的字符,这也没什么用)。这个链接解释了怎么做: https://superuser.com/questions/88870/adding-a-zero-before-values-in-an-excel-spreadsheet-column
感谢大家的帮助 - 等我有足够的时间把这个作为我自己问题的答案发布出来。
1 个回答
0
试试这个:
import csv
fn_in="/tmp/FIPS_original.csv"
fn_out="/tmp/FIPS_appended.csv"
with open(fn_in, "r") as inFile, open(fn_out, 'w') as outFile:
reader = csv.reader(inFile, delimiter = ";", quotechar = '"')
writer = csv.writer(outFile, delimiter = ";", quotechar = '"')
header=next(reader)
writer.writerow(header)
for row in reader:
row[0] = row[0].zfill(11)
writer.writerow(row)
你说的情况可能是因为csv没有把每一行的每一列解析成一个列表。可以加一个打印语句,看看你的分隔符和引号字符是否正确。