【问题标题】:Appending a "0" to the beginning of a cell in a CSV file?将“0”附加到 CSV 文件中单元格的开头?
【发布时间】: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


【解决方案1】:

试试这个:

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 没有将每一行中的每一列解析为一个列表。尝试输入打印语句以确保您的分隔符和引号字符正确。

【讨论】:

  • 所以这很有趣:我在循环中添加了一个打印语句来打印每一行,不仅没有分隔符(可能是因为列表只有一个值?),值也是 正确(即他们读的是 ['08123002020'] 而不是 ['8123002020'])。所以也许这与默认的 CSV 格式有关?我还应该提到,此时我对原始代码所做的唯一更改是添加了 print 语句。
  • 我不知道。我的示例适用于具有简单测试文件的 me 并使用正确的前导零正确写出数据。使用不同的 quotechar 可能会改变这一点。
  • 我使用了您的确切代码(减去 /tmp/),它给了我相同的结果 :-( 。它一定与我认为的 Excel 格式有关.....我' 会弄乱我的分隔符和引号。谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
相关资源
最近更新 更多