【发布时间】:2023-03-25 10:07:01
【问题描述】:
具体来说,我在 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
感谢您的所有帮助 - 一旦经过足够的时间让我将其发布为我自己问题的答案,我会的。
【问题讨论】:
-
@KevinL 不,我没有修剪新行,这是我的完整代码。你认为我应该为行中的字段添加一个嵌套循环来解决这个问题吗?并且只使用字段 [0] 而不是行 [0]? (我假设 outRow[0] 正在调用整行而不是行中的第一个单元格)
-
可以添加几行示例数据。
标签: python excel python-2.7 csv formatting