如何使用txt文件中的一组行?

时间:2017-05-04 20:29:15

标签: python readlines

我是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,

所以我错过了寄存器的第三个值。

2 个答案:

答案 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]分配给一个唯一命名的变量  (InstructionDestreg等)。相反,只需使用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(";")