如何操作.txt文件以便我只能打印某些行

时间:2016-04-13 12:17:46

标签: python

我想要做的只是让它只有我的.txt文件的第5列的打印行,而不是第3列。我已经尝试了好几次,但是我是python的新手,因此非常感谢任何帮助。

def Option_B():
    print ("Estimate_Number","Customer_ID","Final_Total","Amount_Paid","Amount_Outstanding")
    f = open("paintingJobs.txt", "r")
    searchlines = f.readlines()
    f.close()
    for A, line in enumerate(searchlines):
        if "A" in line and line[5]<line[3]:
            print (line)

这就是我的.txt文件:

E5341,21/09/2015,C102,440,E,0
E5342,21/09/2015,C103,290,A,290
E5343,21/09/2015,C104,730,N,0
E5344,22/09/2015,C105,180,A,180
E5345,22/09/2015,C106,815,A,400
E5346,23/09/2015,C107,970,N,0
E5347,23/09/2015,C108,1050,E,0
E5348,23/09/2015,C109,370,A,200
E5349,25/09/2015,C110,480,A,250
E5350,25/09/2015,C111,330,A,330
E5351,25/09/2015,C112,1750,E,0
E5352,28/09/2015,C113,1500,N,0
E5353,28/09/2015,C114,272,A,200
E5354,29/09/2015,C115,560,E,0
E5355,29/09/2015,C116,530,A,450
E5356,29/09/2015,C117,860,E,0
E5357,29/09/2015,C118,650,E,0
E5358,29/09/2015,C119,380,A,380
E5359,29/09/2015,C120,980,N,0
E5360,30/09/2015,C121,1375,E,0
E5361,01/10/2015,C122,374,A,374
E5362,01/10/2015,C123,867,E,0
E5363,01/10/2015,C124,930,A,500
E5364,02/10/2015,C125,915,A,800
E5365,02/10/2015,C126,1486,A,1486
E5366,03/10/2015,C127,576,E,0
E5367,03/10/2015,C128,427,A,350
E5368,05/10/2015,C129,1346,A,1346
E5369,07/10/2015,C130,1756,N,0
E5370,07/10/2015,C131,432,E,0
E5371,10/10/2015,C132,289,A,289
E5372,10/10/2015,C133,923,E,0
E5373,10/10/2015,C134,1023,A,550
E5374,10/10/2015,C135,2070,E,0
E5375,10/10/2015,C136,687,N,0
E5376,13/10/2015,C137,297,A,297
E5377,13/10/2015,C138,829,E,0
E5378,13/10/2015,C139,1503,E,0
E5379,14/10/2015,C140,850,E,0
E5380,15/10/2015,C141,425,A,425

2 个答案:

答案 0 :(得分:1)

现在,您正在比较行中的第3个和第5个字符,而不是第3和第5列。您必须使用逗号分隔符进行拆分,并且还应在比较之前将这些列转换为整数:

with open("data.txt") as f:
    for line in f:
        columns = line.split(',')
        if "A" in columns and int(columns[5]) < int(columns[3]):
            print(line)

或使用csv模块:

import csv
with open("data.txt") as f:
    reader = csv.reader(f, delimiter=',')
    for columns in reader: 
        if "A" in columns and int(columns[5]) < int(columns[3]):
            print(columns)

答案 1 :(得分:0)

不是Python解决方案,但您可以使用awk$0是整行,$6是从1开始编号的第6列:

$ gawk -F , '$6 < $4 {print $0}' < so.txt

输出:

E5341,21/09/2015,C102,440,E,0
E5343,21/09/2015,C104,730,N,0
E5345,22/09/2015,C106,815,A,400
E5346,23/09/2015,C107,970,N,0
E5347,23/09/2015,C108,1050,E,0
E5348,23/09/2015,C109,370,A,200
E5349,25/09/2015,C110,480,A,250
E5351,25/09/2015,C112,1750,E,0
E5352,28/09/2015,C113,1500,N,0
E5353,28/09/2015,C114,272,A,200
E5354,29/09/2015,C115,560,E,0
E5355,29/09/2015,C116,530,A,450
E5356,29/09/2015,C117,860,E,0
E5357,29/09/2015,C118,650,E,0
E5359,29/09/2015,C120,980,N,0
E5360,30/09/2015,C121,1375,E,0
E5362,01/10/2015,C123,867,E,0
E5363,01/10/2015,C124,930,A,500
E5364,02/10/2015,C125,915,A,800
E5366,03/10/2015,C127,576,E,0
E5367,03/10/2015,C128,427,A,350
E5369,07/10/2015,C130,1756,N,0
E5370,07/10/2015,C131,432,E,0
E5372,10/10/2015,C133,923,E,0
E5373,10/10/2015,C134,1023,A,550
E5374,10/10/2015,C135,2070,E,0
E5375,10/10/2015,C136,687,N,0
E5377,13/10/2015,C138,829,E,0
E5378,13/10/2015,C139,1503,E,0
E5379,14/10/2015,C140,850,E,0