Python 附加一个“;0“;到CSV文件中单元格的开头?

Python 附加一个“;0“;到CSV文件中单元格的开头?,python,excel,python-2.7,csv,formatting,Python,Excel,Python 2.7,Csv,Formatting,具体来说,我在CSV文件的一列中列出了大约2000个FIPS代码(例如:“8001007801”)。所有这些代码都应以0开头,但默认情况下Excel会格式化单元格,以删除仅包含数字的单元格开头的“0”值。我知道在打印时如何格式化,但在写入文件时却不知道 我需要脚本遍历每行的第一个单元格,在其前面放置一个“0”,然后将该行复制到新的输出CSV。以下是我到目前为止的情况: import csv inFile = open("FIPS_original.csv", "r")

具体来说,我在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函数在pythonidle中打印我的值时,它们的格式是正确的。我还应该注意,我已取消选中Excel设置,该设置会自动将没有字母字符的文本单元格格式化为数字,并且我还尝试将两个电子表格中的所有单元格格式化为数字

答:原来这确实是Excel中的格式问题。将单元格类型更改为文本不会产生任何效果,即使禁用了将仅包含数字的文本单元格自动更改为数字单元格的选项。您需要做的是自定义单元格格式,以容纳所需的字符数(如果列中的所有数字都是不同的字符,则无法解决任何问题)。此链接说明了如何执行此操作:

感谢所有的帮助-一旦有足够的时间让我把这篇文章作为我自己问题的答案,我会的。

试试这个:

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

@KevinL不,我没有删减新行,这是我的全部代码。您认为我应该为行中的字段添加嵌套循环来解决这个问题吗?是否只使用字段[0]而不是行[0]?(我假设outRow[0]调用的是整行,而不是行中的第一个单元格)可能会添加几行示例数据。因此,这很有趣:我在循环中添加了一个print语句来打印每一行,不仅没有分隔符(可能是因为列表只有一个值?),而且这些值也是正确的(即它们读取['08123002020']而不是['81230020'])。那么这可能与默认的CSV格式有关?我还应该提到,目前我对原始代码所做的唯一更改是添加了print语句。我不知道。我的示例使用一个简单的测试文件,并使用正确的前导零正确地写出数据。使用不同的quotechar可能会改变这一点。我使用了您的确切代码(减去/tmp/),它给了我相同的结果:-(。我认为这一定与Excel格式有关…..我将稍微处理一下分隔符和quote字符。谢谢您的帮助。