从文本文件中读取特定的列和行 - Python 3

时间:2018-04-13 14:36:21

标签: python python-3.x

我试图弄清楚如何让我的程序逐行读取我的文本文件的前5列而不读取上面的文本以及列和行之间的文本,因为它不包含我需要的数据找到记录温度最低的日期和年份。

这是我的文本文件的示例:

 05/01  80     2002     7       2018    19   1966   61     2013  

05/02   77     1950     3       1945    22   1936   58     2001  

---------------------------------------------------------------------------


Day   Rec Max  Year   Rec Min    Year   Max   Year   Min    Year      

---------------------------------------------------------------------------
08/01   79     2002     8       1981     28   1900   54     1988   

08/02   79     1989     5       1971     31   1994    60    1998    

这是我到目前为止的代码(下面)。我用print来检查我是否只得到了我需要的数据,但是当我运行程序时,我也得到了文本和连字符。它并不多,但我仍在努力搞清楚,但我不知道接下来该做什么。感谢所有愿意提前帮助我的人。

我正在尝试进行更改并添加到下面的现有代码中以查找预期的输出。

 def main():

    file = open ('filename.txt', 'r')  #open the file
    for num in file:
       numbers = num.split() #splits num 
       if len(numbers)> 5:
           print(numbers[0], numbers[1], numbers[2], numbers[3], 
            numbers[4]) #prints the columns 



 main()

我从代码中获得的输出

05/01 80 2002 7 2018

05/02 77 1950 3 1945

Day Rec_Max Year Rec_Min Year

08/01 79 2002 8 1981

08/02 79 1989 5 1971

预期输出(示例)

Day: 01/01      
Year: 2008                
Lowest Temperature: 32

这是我对代码进行的更改。

    def main():  
             file = open ('filename.txt', 'r')     
             for num in file.read().splitlines():      
                 i = num.split()     
                 if len(i)> 6:     
                    print('Day: {}\nYear: {}\nLowest Temperature: {}\n'.format(i[0], i[4], i[1]))   


    main()

这是我在更改代码后获取输出的示例。如何在输出中读取文本并仅读取数字?

日:88
年份:1910年 最低温度:88

日:最大
年份:年份 最低温度:最大

1 个答案:

答案 0 :(得分:1)

对于测试数据,您可以忽略没有数字的行,并使用format()

with open('test.txt') as f:
    data = f.read().splitlines()
    data = [i.split() for i in data if any(j.isdigit() for j in i)]
    for i in data:
        print('Day: {}\nYear: {}\nLowest Temperature: {}\n'.format(i[0], i[4], i[1]))

输出:

Day: 05/01
Year: 2018
Lowest Temperature: 80

Day: 05/02
Year: 1945
Lowest Temperature: 77

Day: 08/01
Year: 1981
Lowest Temperature: 79

Day: 08/02
Year: 1971
Lowest Temperature: 79