2017-10-04 32 views
1

参与我们的测试CSV文件:用%s前导零的CSV到XML转换

COLUMN1;COLUMN2;COLUMN3;COLUMN4;COLUMN5;COLUMN6;COLUMN7 
CODE;1234;;0987654321;;;10110025 

我想将这个文件转换成XML。要做到这一点,我正在使用this Stackoverflow answer中的代码。完整的测试代码是这样的:

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 '\n'.join(df.apply(convert_row, axis=1)) 

但是,每个以零开始的列值都会被剥离前导零字符。这是输出:

<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文件中收到的正好与中的值相同?

回答

2

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

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

希望这会有所帮助!

+0

就是这样,谢谢! – user1301428