Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文件中读取字符串的某些部分_Python - Fatal编程技术网

Python 从文件中读取字符串的某些部分

Python 从文件中读取字符串的某些部分,python,Python,经过很长一段时间后,现在正在尝试python 我有一个文件有一行: My_NUMBER = 24 我想在这里提取这个数字,我假设是24,但这是我想根据我的_数字提取的。在我的python代码中,我能够读取这行代码 with open(filename) as f: lines = f.read().splitlines() for line in lines: if line.startswith(' My_NUMBER

经过很长一段时间后,现在正在尝试python

我有一个文件有一行:

My_NUMBER                 =  24
我想在这里提取这个数字,我假设是24,但这是我想根据我的_数字提取的。在我的python代码中,我能够读取这行代码

with open(filename) as f: lines = f.read().splitlines()

for line in lines:
    if line.startswith(' My_NUMBER                 ='):
        line=(line.rsplit(' ', 1)[0])
        num= line.rsplit('=',1)[1].split("=")[0]
        num = num.strip(" ")
        print num

但是,这不会打印空白输出,而不会打印数字。如果我在这里做了任何明显错误的事情,有人能命令我吗?

使用正则表达式可能会更好

import re

txt='My_NUMBER                 =  24'

re1='.*?'   # Non-greedy match on filler
re2='(\\d+)'    # Integer Number 1

rg = re.compile(re1+re2,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
    int1=m.group(1)
    print "("+int1+")"+"\n"
从这里开始:
使用正则表达式可能会更好

import re

txt='My_NUMBER                 =  24'

re1='.*?'   # Non-greedy match on filler
re2='(\\d+)'    # Integer Number 1

rg = re.compile(re1+re2,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
    int1=m.group(1)
    print "("+int1+")"+"\n"
从这里开始:

试试这样的方法:

In [49]: with open("data1.txt") as f:
   ....:     for line in f:
   ....:         if line.strip():           #if line is not an empty line
   ....:             if "My_NUMBER" in line:
   ....:                 num=line.split("=")[-1] # split line at "=" and 
                                                 # return the last element
   ....:                 print num
   ....:                 
   ....:                 
  24

试着这样做:

In [49]: with open("data1.txt") as f:
   ....:     for line in f:
   ....:         if line.strip():           #if line is not an empty line
   ....:             if "My_NUMBER" in line:
   ....:                 num=line.split("=")[-1] # split line at "=" and 
                                                 # return the last element
   ....:                 print num
   ....:                 
   ....:                 
  24

这是正则表达式的完美工作:

import re
text = open(filename).read()
print re.search("^\s*My_NUMBER\s*=\s*(\d*)\s*$", text, re.MULTILINE).group(1)

这是正则表达式的完美工作:

import re
text = open(filename).read()
print re.search("^\s*My_NUMBER\s*=\s*(\d*)\s*$", text, re.MULTILINE).group(1)

我会选择这样的

with open(filename) as f:
    for line in f:
        line = line.replace(' ', '')
        if line.startswith('My_NUMBER'):
            number = line.partition('=')[2]
            print number

我会选择这样的

with open(filename) as f:
    for line in f:
        line = line.replace(' ', '')
        if line.startswith('My_NUMBER'):
            number = line.partition('=')[2]
            print number
未经测试,但应该有效


未经测试,但应能工作

我认为,最整洁的方法是循环每一行,基于=,然后检查=之前的值是否是我的\u编号

函数在这方面很好,它类似于split,但总是返回3个块。另外,使用str.strip意味着您不需要担心空格

with open(filename) as f:
    lines = f.readlines()

for line in lines:
    key, eq, value = line.partition("=")
    if key.strip() == "MY_NUMBER":
        num = value.strip()
        print num

我想说,最整洁的方法是在每一行上循环,基于=,然后检查=之前的值是否是我的_数

函数在这方面很好,它类似于split,但总是返回3个块。另外,使用str.strip意味着您不需要担心空格

with open(filename) as f:
    lines = f.readlines()

for line in lines:
    key, eq, value = line.partition("=")
    if key.strip() == "MY_NUMBER":
        num = value.strip()
        print num


你认为这条直线=直线.rsplit'',1[0]在做什么?你认为这条直线=直线.rsplit'',1[0]在做什么?我建议用\d*或\d+代替。*太好了,我以为他不知道等号后面是什么。谢谢数字后面可能有空格。我建议用\d*或\d+代替。*太好了,我以为他不知道等号后面是什么。谢谢数字后面可能有空格。我觉得这个缩进很有趣。我很确定你需要移动lines=f.read.splitlines。此外,如果要这样做,您最好将其全部删除,只需在文件中迭代:for line in f:而不是for line in line:@mgilson yeap,这是完全错误的。很抱歉至少,这对手术有帮助。这个压痕在我看来很有趣。我很确定你需要移动lines=f.read.splitlines。此外,如果要这样做,您最好将其全部删除,只需在文件中迭代:for line in f:而不是for line in line:@mgilson yeap,这是完全错误的。很抱歉至少,这有助于行动。为什么这被否决了?它可能并不完美,但这并不像正则表达式回答的那么可怕。这将删除str.partition的d值上的=-better to use.strip之后未知值的空白。如果整个文件已经在内存中,则正则表达式可以正常工作,不需要逐行迭代line@dbr:数字中没有空格为什么有这是被否决的吗?它可能并不完美,但这并不像正则表达式回答的那么可怕。这将删除str.partition的d值上的=-better to use.strip之后未知值的空白。如果整个文件已经在内存中,则正则表达式可以正常工作,不需要逐行迭代line@dbr:数字边框中没有空格与蒂姆的答案几乎相同。为什么,哦,为什么,你在做什么。阅读。分割线?@SilentGhost它是从原始答案复制粘贴的,编辑过的Tim的答案也不完全相同,这取决于=,之后的值,除了与Tim的答案几乎相同之外,还对这个答案进行了评论。为什么,哦,为什么,你在做什么。读。分割线?@SilentGhost它是从原始答案复制粘贴的,编辑过的Tim的答案也不完全相同,这取决于=,之后的值,对这个答案进行了评论