python从文件获取值

时间:2018-10-03 07:26:19

标签: python

我是一名新的python学习者,我想编写一个程序来读取文本文件,并保存包含“宽度”的一行的值并打印出来。 该文件如下所示:

width:               10128
nlines:               7101

我正在尝试类似的事情:

filename = "text.txtr"

# open the file for reading
filehandle = open(filename, 'r')
while True:
    # read a single line
    line = filehandle.readline()
    if " width " in line:
        num = str(num)  # type:
        print (num)
    # close the pointer to that file
filehandle.close()

4 个答案:

答案 0 :(得分:1)

这是基于穆罕默德的简化方法。

您需要的是:

  • 打开文件
  • 读取行,直到您发现其中的“宽度”
  • 提取冒号后面的数字
  • 关闭文件
  • 打印号码

它可以提供的Python

num = None                     # "sentinel" value
with open(file) as fd:         # with will ensure file is closed at end of block
    for line in fd:            # a Python open file is an iterator on lines
        if "width" in line:    # identify line of interest
            num = int(line.split(':')[1])    # get the number in the second part of
                                             # the line when it is splitted on colons
            break              # ok, line has been found: stop looping

if num is not None:            # ok we have found the line
    print(num)

答案 1 :(得分:0)

由于行if " width " in line:,因此未返回结果。

从文件中可以看到,其中没有一行" width ",也许您想这么做:

 if "width:" in line:
      #Do things

还请注意,代码存在一些问题,例如,由于行While True:,您的程序将永远无法完成,因此,您将永远不会真正到达行filehandle.close()和行的方式您打开文件(首选使用with)。另外,您正在定义num = str(num),但尚未定义num,因此您也会遇到问题。

答案 2 :(得分:0)

您打开文件的方法不好,请在每次打开文件时尝试使用with语句。然后,您可以遍历文件中的每一行,并检查它是否包含宽度,如果需要,则需要提取该数字,这可以使用正则表达式来完成。请参见下面的代码。

import re

filename = "text.txtr"


with open(filename, 'r') as filehandle:
    # read a single line
    for line in filehandle:
        if "width" in line:
            num = re.search(r'(\d+)\D+$', line).group(1)
            num = str(num)  # type:
            print (num)

请参阅以下Matt的评论,以获取获取号码的另一种解决方案。

答案 3 :(得分:0)

所有人都不需要将文件保存在变量中,最好使用with open方法直接打开文件,一旦在self_exit()函数上执行了读/写操作,它将负责关闭文件。 / p>

因此,您可以像下面这样开始并清理代码:

with open("text.txtr", "r") as fh:
    lines = fh.readlines()
    for line in lines:
       if 'width' in line:
           print(line.strip())