我是Python新手,目前正在大学学习我的项目。 所以我有文件“inst.txt”,我需要解析它。我的文件如下。 GG代表循环的开始。
LI; R4,; 260
LI; R5,; 272
LI; R1,; 8
LI; R2,; 4
LI; R3,; 0
GG: L.D; F1,; 4(R4)
L.D; F2,; 8(R5)
ADD.D; F4,; F6,; F2
SUB.D; F5,; F7,; F1
MUL.D; F6,; F1,; F5
ADD.D; F7,; F2,; F6
ADD.D; F6,; F1,; F7
DADDI; R4,; R4,; 20
DADDI; R5,; R5,; 8
DSUB; R1,; R1,, R2
BNE; R1,; R3,; GG
HLT;
HLT;
我需要使用“;”以与文件相同的方式输出数据分别为[0:2]和[0:3]的分隔符和数组。我怎么能这样做?
我现在使用的代码如下:
#Accessing a text file
import os
file = open ("inst.txt","r")
for lines[0:4] in file:
fields = lines.split(";")
Instruction = fields[0]
Destreg = fields[1]
Data = fields[2]
print(Instruction + Destreg + Data)
file.close()
但是它给了我以下错误:
File "C:\Python27\parsing_test.py", line 11, in <module>
fields = lines.split(";")
AttributeError: 'list' object has no attribute 'split'
或者如果我使用此代码:
import os
file = open("inst.txt","r")
for line in file:
fields = line.split(";")
Instruction = fields[0]
Destreg = fields[1]
Data = fields[2]
print(Instruction + Destreg + Data)
file.close()
但结果仅以
的方式出现 LI R4, 260
LI R5, 272
LI R1, 8
LI R2, 4
LI R3, 0
GG: L.D F1, 4(R4)
L.D F2, 8(R5)
ADD.D F4, F6,
SUB.D F5, F7,
MUL.D F6, F1,
ADD.D F7, F2,
ADD.D F6, F1,
DADDI R4, R4,
DADDI R5, R5,
DSUB R1, R1,, R2
BNE R1, R3,
所以我错过了寄存器的第三个值。
答案 0 :(得分:0)
请参阅输入的以下部分作为理解问题的示例:
ADD.D; F4,; F6,; F2
您的变量的映射将是:
Instruction = fields[0] # "ADD.D"
Destreg = fields[1] # "F4"
Data = fields[2] # "F6"
您只是错过了"F2"
答案 1 :(得分:0)
我认为你可能间接询问相同的代码如何处理一行包含3个子串或4个子串的两种不同情况。
一种方法是不将每个fields[i]
分配给一个唯一命名的变量
(Instruction
,Destreg
等)。相反,只需使用fields
变量本身,以便稍后(只要程序逻辑需要它),您可以测试len(fields)
是3还是4并做出相应的反应。
另一种方法是有条件地分配另一个变量:
Instruction = fields[0]
Destreg = fields[1]
Data = fields[2]
RedShirt = fields[3] if len(fields) > 3 else None
迟早我希望你的程序逻辑会要求你测试RedShirt is None
是否所以编程量差别不大。
另一个有用的步骤是从每个字段中去除空格。你可以在一开始就这样做:
fields = [x.strip() for x in line.split(";")] # instead of just fields = line.split(";")