如何使用python将制表符分隔的.txt文件转换为xml或csv

pgky5nke  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(289)

我有一个问题,在我们的应用程序中,在编写python脚本时,我们只将文件数据作为字符串使用,而将输出作为字符串使用。然后,我们用作文件的输出字符串,例如下面的xml或csv,就是一个以制表符分隔的.txt文件格式,它将从客户传入我们的应用程序。h是只出现一次的标题,d是可以重复的行级数据。下面是关于这些字段是什么的说明。如何将此数据转换为csv格式或xml格式。我看到了很多关于stackoverflow的例子,但都是关于打开文件并加载文件的。这在我的案子里是行不通的。

H   CustID   CustPO   OrderDate   UserID   EmergencyFlag
D   <null>   PartNumber   Description   Quantity
D   <null>   PartNumber   Description   Quantity
D   <null>   PartNumber   Description   Quantity

预期输入:

H   1520982 wpg-A10026  2020-11-24  STG N
D       52892   LAMP RED OVAL STOP TAIL TURN    2   
D       AL919338    ECU MODULE 2S/1M M/H PLC SELECT 1

预期csv输出:

H,1520982,wpg-A10026,2020-11-24,STG,N
D,,52892,LAMP RED OVAL STOP TAIL TURN,2 
D,,AL919338,ECU MODULE 2S/1M M/H PLC SELECT,1

预期的xml输出:

<?xml version="1.0" encoding="utf-8"?>
<Record>
<Header>
<RecordType>H</RecordType>
<CustID>1520982</CustPO>
<CustPO>wpg-A10026</CustPO>
<OrderDate>2020-11-24</OrderDate>
<UserID>STG</UserID>
<EmergencyFlag>N</EmergencyFlag>
</Header>
<Details> 
<RecordType>D</RecordType>
 2nd field is null
<PartNumber>52892</PartNumber>
<Description>LAMP RED OVAL STOP TAIL TURN</Description>
<Quantity>2</Quantity>
</Details>
<Details> 
<RecordType>D</RecordType>
 2nd field is null
<PartNumber>AL919338</PartNumber>
<Description>ECU MODULE 2S/1M M/H PLC SELECT</Description>
<Quantity>1</Quantity>
</Details>
</Record>

我得到的结果有点错误。如果您看到description字段,它是一个完整的字段,但被逗号替换。但不是实际的制表符空间。h 1520982 wpg-a10026 2020-11-24 stg n d 52892灯,红色,椭圆形,停车,尾灯,转弯2
d al919338 ecu,模块,2s/1m,m/h,plc,选择1。
因此,我将您的代码更正为content[i]=filter(bool,content[i].split(“\t”)),这样就可以在有制表符分隔的地方使用逗号。目前看来,这似乎有点工作,但我的第二个领域下的细节d是空的,所以我想它作为两个逗号,,但这似乎没有任何提示?非常感谢您抽出时间。感谢
我得到的当前输出如下,在“d”之后还有两个问题需要检查是否需要在输出中显示空值。第二个问题描述字段已经有一个逗号,因此需要与客户确认是否可以停止在描述字段中发送逗号或其他字符。或者为了更准确,我需要将其转换为xml。但仍然非常感谢这是一个很好的开始与h,1520982,wpg-A10026202-11-24,stg,n d,52892,灯,红色椭圆形停止尾转向,2,d,al919338,ecu模块2s/1m m/h plc选择,1,

rxztt3cl

rxztt3cl1#

通常情况下 csv 模块应该能够完成它。如果没有(分隔值的空格数不一致),可以手动拆分行:

content = "INPUTGOESHERE".split("\n")

for i in range(len(content)):
    content[i] = filter(bool, content[i].split(" ")) # split the lines at spaces and filter out empty strings

outstr = ""

for line in content:
    line = ",".join(line) # convert values list to a comma separated string for each line
    outstr += line + "\n"

print(outstr)

有关如何将csv转换为xml,请参见此答案的编辑。

相关问题