具体而言,我在CSV文件的单个列中列出了大约2000个FIPS代码(例如:" 8001007801")。所有这些代码应该以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"。 任何人都可以帮忙吗?如果您需要更多信息,请告知我们,并提前致谢。
编辑:我应该注意,当我使用print函数在Python IDLE中打印我的值时,它们的格式正确。我还应该注意到,我已经取消选中Excel设置,该设置会自动格式化没有字母字符作为数字的文本单元格,并且我还尝试将两个电子表格中的所有单元格格式化为数字。
答案:原来这确实是Excel中的格式化问题。即使您禁用自动将仅包含数字的文本单元格更改为数字单元格的选项,将单元格类型更改为文本也不会执行任何操作。您需要做的是自定义格式化您的单元格以容纳您需要的许多字符(如果列中的所有数字都是不同的字符,则无法解决任何问题)。此链接说明了如何执行此操作:https://superuser.com/questions/88870/adding-a-zero-before-values-in-an-excel-spreadsheet-column
感谢所有的帮助 - 一旦有足够的时间让我发布这个作为我自己的问题的答案我会。
答案 0 :(得分: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没有将每行中的每一列解析为列表。尝试输入print语句以确保您的分隔符和引号字符是正确的。