python函数读取文件和正则表达式
我最近开始学习Pythonpython函数读取文件和正则表达式,python,Python,我最近开始学习Python def bacafile(): f=open('A157038027_S2TIB_2b.txt','r') lines=f.read().split(',') while lines!='': lines=f.readline for i in (len(f)): temp (i)= open ('A157038027_S2TIB_2b.txt','r') te
def bacafile():
f=open('A157038027_S2TIB_2b.txt','r')
lines=f.read().split(',')
while lines!='':
lines=f.readline
for i in (len(f)):
temp (i)= open ('A157038027_S2TIB_2b.txt','r')
temp(i)=f
f=temp(i)
if (temp(i))==("[0-9]"):
print(temp(i),"integer number")
elif(temp(i))== ("([-+]?([0-9]*\.[0-9]+|[0-9]+"):
print(temp(i),"floating number")
elif (temp(i))== ("[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?"):
print (temp(i),"exponential number")
else:
print ("not number")
print(lines)
f.close()
但是,当函数执行时,我收到错误,“Can not assign to function call”这意味着什么,以及如何修复它?此代码有几处错误,但您收到的错误消息来自一行,如
temp(I)=……
temp(i)
是函数调用的结果(使用参数i
调用函数temp
),并且不能将该结果分配给任何对象a[i]=b
有效(分配a的第i个元素),但a(i)=b
无效
以下是一些其他错误的地方:
:f.readline是一个函数,但没有lines=f.readline
,您实际上没有调用该函数()
- 您不需要readline,因为您已经用
lines=f.read().split(',')读取了文件。
- 第一行出现语法错误:在
def bacfile()之后需要一个分号
def bacafile():
with open('A157038027_S2TIB_2b.txt','r') as f:
for line in f:
# do something with the line
print line
此代码有几处错误,但您收到的错误消息来自一行,如
temp(i)=…
temp(i)
是函数调用的结果(使用参数i
调用函数temp
),并且不能将该结果分配给任何对象a[i]=b
有效(分配a的第i个元素),但a(i)=b
无效
以下是一些其他错误的地方:
:f.readline是一个函数,但没有lines=f.readline
,您实际上没有调用该函数()
- 您不需要readline,因为您已经用
lines=f.read().split(',')读取了文件。
- 第一行出现语法错误:在
def bacfile()之后需要一个分号
def bacafile():
with open('A157038027_S2TIB_2b.txt','r') as f:
for line in f:
# do something with the line
print line
错误会准确地告诉您哪一行出错。我注意到,在你的代码中,第一个是: 这句话说:
temp
i
temp
的对象(预期为函数或其他可调用对象),向其传递一个参数,该参数是名称i
=
运算符右侧表达式的结果分配给前面的函数调用赋值的左侧必须是变量(或字段或集合中的条目)的名称。它不能是函数调用或其他任意表达式。错误会准确地告诉您哪一行出错。我注意到,在你的代码中,第一个是: 这句话说:
temp
i
temp
的对象(预期为函数或其他可调用对象),向其传递一个参数,该参数是名称i
=
运算符右侧表达式的结果分配给前面的函数调用赋值的左侧必须是变量(或字段或集合中的条目)的名称。它不能是函数调用或其他任意表达式。因为答案已经给出。让我们从更一般的意义上讨论如何改进代码 首先要清楚:bakafile不是一个非常具有描述性的函数名。目的是亲吻,并能够理解纯粹基于标题的功能 此函数似乎试图解析一个类似csv的文件,该文件包含十进制数、带指数或不带指数的浮点数,然后打印所有行<代码>解析和打印可能会成为一个好名字 其次,分而治之。添加简单函数可以大大提高可读性 第三个神奇常量,文件名应该是参数或常量 第四,python引入了带有关键字的
,简化了io
示例结果(解释我认为您正在做的事情):
因为答案已经给出了。让我们从更一般的意义上讨论如何改进代码
首先要清楚:bakafile不是一个非常具有描述性的函数名。目的是亲吻,并能够理解纯粹基于标题的功能
此函数似乎试图解析一个类似csv的文件,该文件包含十进制数、带指数或不带指数的浮点数,然后打印所有行<代码>解析和打印可能会成为一个好名字
其次,分而治之。添加简单函数可以大大提高可读性
第三个神奇常量,文件名应该是参数或常量
第四,python引入了带有
关键字的,简化了io
示例结果(解释我认为您正在做的事情):
当你说temp(i)=…
我不能说如何修复它,因为我不知道你想实现什么。当你说temp(i)=…
我不能说如何修复它,因为我不知道你想实现什么。
import re
# compiling ahead of time improves performance, and allows you to
# name what your regex does
int_re = re.compile(r'^[-+]?[0-9]+$')
float_re = re.compile(r'^[-+]?[0-9]*\.[0-9]+$')
exp_re = re.compile(r'^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$')
def is_int(string):
return int_re.search(string) != None
def is_float(string):
return float_re.search(string) != None
def is_exponent(string):
return exp_re.search(string) != None
def parse(item):
if is_int(item):
print("integer number: %d" % int(item))
elif is_float(item):
print("floating number: %.3f" % float(item))
elif is_exponent(item):
print("exponential number: %e" % float(item))
def parse_and_print(filename):
with open(filename, 'r') as f:
# read all lines
for line in f:
for item in line.split(','):
item = item.strip() # remove whitespace
parse(item) # parse individual items
# reset the read position in the file to begin
f.seek(0)
# print all lines afterwards
for line in f:
print(line)
parse_and_print('A157038027_S2TIB_2b.txt')