在Python中使用%s会在CSV到XML转换中删除前导零

Using %s in Python strips leading zeroes in CSV to XML conversion

拿这个测试CSV文件:

1
2
COLUMN1;COLUMN2;COLUMN3;COLUMN4;COLUMN5;COLUMN6;COLUMN7
CODE;1234;0123456789;0987654321;012345678987654321;012345;10110025

我想将此文件转换为XML。 为此,我使用此Stackoverflow答案中的代码。 完整的测试代码是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import csv  
import pandas as pd
df = pd.read_csv('test.csv', sep=';')

def convert_row(row):
    return"""<root>
    <column1>%s</column1>
    <column2>%s</column2>
    <column3>%s</column3>
    <column4>%s</column4>
    <column5>%s</column5>
    <column6>%s</column6>
    <column7>%s</column7>  
</root>"""
% (
    row.COLUMN1, row.COLUMN2, row.COLUMN3, row.COLUMN4, row.COLUMN5, row.COLUMN6, row.COLUMN7)

print '
'
.join(df.apply(convert_row, axis=1))

但是,以零开头的每个列值都会被去掉前导零字符。 这是输出:

1
2
3
4
5
6
7
8
9
<root>
    <column1>CODE</column1>
    <column2>1234</column2>
    <column3>123456789</column3>
    <column4>987654321</column4>
    <column5>12345678987654321</column5>
    <column6>12345</column6>
    <column7>10110025</column7>
</root>

我认为使用%s会保持原始字符串的完整性而不以任何方式修改它,是不是这样?

如何确保XML输出在CSV文件中获得完全相同的值?


问题不在于字符串格式,而在于CSV导入。 导入时,Pandas会将您的数据转换为int64

尝试df = pd.read_csv('test.csv', sep=';', dtype='str')以避免这种情况。

希望这可以帮助!