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

2024-06-24 12:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,在我们的应用程序中,在编写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>

我得到的输出有点错误。如果看到“描述”字段,则它是一个完整的字段,但被逗号替换。但不是实际的选项卡空间。 H 1520982 wpg-A10026 2020-11-24 STG N D 52892灯,红色,椭圆形,停车,尾灯,转弯2
D AL919338电子控制单元,模块,2S/1M,M/H,可编程逻辑控制器,选择1

因此,我将您的代码更正为content[I]=filter(bool,content[I].split(“\t”)),这样它就可以在有制表符定界的地方给出逗号。 现在它似乎有点工作,但我在细节D下的第二个字段是空的,所以我希望它是两个逗号,但这并没有显示任何提示? 非常感谢您抽出时间。感激

我得到的电流输出如下 由于“D”之后还有两个问题,因此需要检查是否需要在输出中显示空值。第二个问题描述字段已经有一个逗号,因此需要与客户确认他们是否可以停止在描述字段中发送逗号或其他字符。或者为了更准确,我需要将其转换为xml。 但还是非常感谢你这是一个很好的开始 H、 1520982,wpg-A10026200-11-24,北澳大利亚州STG D、 52892,灯,红色椭圆形停止尾转向,2, D、 AL919338,ECU模块2S/1M M/H PLC选择,1


Tags: 文件descriptionxmlnullquantityplc逗号ecu
1条回答
网友
1楼 · 发布于 2024-06-24 12:28:06

通常,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,请参见this answer的编辑

相关问题 更多 >