Python 正则表达式的问题
我需要在文件中找到一个字符串;我将文件中的字符串复制并粘贴到pattern spot中,但仍然找不到它。print命令返回除名字以外的空字符串。这是我的密码:Python 正则表达式的问题,python,regex,file-io,Python,Regex,File Io,我需要在文件中找到一个字符串;我将文件中的字符串复制并粘贴到pattern spot中,但仍然找不到它。print命令返回除名字以外的空字符串。这是我的密码: def fillWindow(self,student): global fileDirectory location = path.join(fileDirectory, student + '.txt') file = open(location, 'r') # find item in list a
def fillWindow(self,student):
global fileDirectory
location = path.join(fileDirectory, student + '.txt')
file = open(location, 'r')
# find item in list and then place it in the text box
firstName = re.findall(r'firstName\:', file.read())
print(firstName)
self.firstNameBox.insert(0,'firstName')
lastName = re.findall(r'lastName\:', file.read())
print(lastName)
self.lastNameBox.insert(0,'lastName')
family = re.findall(r'family\:', file.read())
print(family)
self.familyNameBox.insert(0,'family')
file.close()
以下是该文件的内容:
firstName: test
lastName: one
family: family
[default]
firstName: test
lastName: one
family: family
我认为file.read将移动光标,因此后续调用将尝试从文件末尾读取
您可以先将文件内容读入变量,然后在其中执行正则表达式搜索。我认为file.read将移动光标,以便后续调用将尝试从文件末尾读取
您可以先将文件的内容读入变量,然后在其中执行正则表达式搜索。您最好使用readlines或xreadlines在中读取文件的行。大概是这样的:
input = open('input')
for line in input.xreadlines():
if line.startswith('firstName'):
firstname = line.split()[1]
elif line.startswith('lastName'):
lastname = line.split()[1]
elif line.startswith('family'):
family = line.split()[1]
input.close()
print firstname
print lastname
print family
此外,如果要对此使用正则表达式,则需要使用以下内容:
import re
line = "family: blah"
m = re.search("family: (.*)", line)
if m != None:
print m.group(1)
您最好使用readlines或xreadlines读取文件中的行。大概是这样的:
input = open('input')
for line in input.xreadlines():
if line.startswith('firstName'):
firstname = line.split()[1]
elif line.startswith('lastName'):
lastname = line.split()[1]
elif line.startswith('family'):
family = line.split()[1]
input.close()
print firstname
print lastname
print family
此外,如果要对此使用正则表达式,则需要使用以下内容:
import re
line = "family: blah"
m = re.search("family: (.*)", line)
if m != None:
print m.group(1)
如果可以使文件格式更灵活一些,那么可以在2.X中使用内置的配置解析器模块ConfigParser,在3.X中使用ConfigParser 对于文件:
firstName: test
lastName: one
family: family
[default]
firstName: test
lastName: one
family: family
以下代码可以正常工作:
import ConfigParser
def fillWindow(self,student):
global fileDirectory
location = path.join(fileDirectory, student + '.txt')
parser = ConfigParser.ConfigParser()
parser.read(location)
firstName = parser.get('default','firstName')
lastName = parser.get('default','lastName')
family = parser.get('default','family')
或者编辑,您的原始文件可以使用eyquem指出的csv进行解析:
import csv
def fillWindow(self,student):
global fileDirectory
location = path.join(fileDirectory, student + '.txt')
reader = csv.reader(open(location),delimiter=':')
dict = {}
for row in reader:
dict[row[0]] = row[1]
如果可以使文件格式更灵活一些,那么可以在2.X中使用内置的配置解析器模块ConfigParser,在3.X中使用ConfigParser 对于文件:
firstName: test
lastName: one
family: family
[default]
firstName: test
lastName: one
family: family
以下代码可以正常工作:
import ConfigParser
def fillWindow(self,student):
global fileDirectory
location = path.join(fileDirectory, student + '.txt')
parser = ConfigParser.ConfigParser()
parser.read(location)
firstName = parser.get('default','firstName')
lastName = parser.get('default','lastName')
family = parser.get('default','family')
或者编辑,您的原始文件可以使用eyquem指出的csv进行解析:
import csv
def fillWindow(self,student):
global fileDirectory
location = path.join(fileDirectory, student + '.txt')
reader = csv.reader(open(location),delimiter=':')
dict = {}
for row in reader:
dict[row[0]] = row[1]
妈妈咪呀!太复杂了
def fillWindow(student):
global fileDirectory
location = path.join(fileDirectory, student + '.txt')
pat = re.compile('firstName: (.*)\r?\n'
'lastName: (.*)\r?\n'
'family: (.*)')
with open(location, 'r') as f:
ch = f.read()
firstName,lastName,family = pat.search(ch).groups()
# or li = pat.findall(ch) if there are several
print(firstName)
self.firstNameBox.insert(0,'firstName')
print(lastName)
self.lastNameBox.insert(0,'lastName')
print(family)
self.familyNameBox.insert(0,'family')
顺便问一下,指令全局文件目录的用途是什么
我想有几个部分是这样的
firstName: test
lastName: one
family: family
那么为什么不使用csv.reader或csv.DictReader呢?妈妈咪呀!太复杂了
def fillWindow(student):
global fileDirectory
location = path.join(fileDirectory, student + '.txt')
pat = re.compile('firstName: (.*)\r?\n'
'lastName: (.*)\r?\n'
'family: (.*)')
with open(location, 'r') as f:
ch = f.read()
firstName,lastName,family = pat.search(ch).groups()
# or li = pat.findall(ch) if there are several
print(firstName)
self.firstNameBox.insert(0,'firstName')
print(lastName)
self.lastNameBox.insert(0,'lastName')
print(family)
self.familyNameBox.insert(0,'family')
顺便问一下,指令全局文件目录的用途是什么
我想有几个部分是这样的
firstName: test
lastName: one
family: family
那么为什么不使用csv.reader或csv.DictReader呢?因为我以前从未使用过它!太棒了。而且我从未见过configparser模块!现在我知道了。极好的因为我以前从未用过!太棒了。而且我从未见过configparser模块!现在我知道了。极好的