Python 在逗号分隔的文本文件中查找字符,并返回它所属的字符串
我有一堆逗号分隔的文本文件,我想读入它们,找到一个特殊字符“X”的位置,然后在它所属的同一行中返回“Z”,以字符串类型。文本文件如下所示:Python 在逗号分隔的文本文件中查找字符,并返回它所属的字符串,python,scope,iterator,text-files,Python,Scope,Iterator,Text Files,我有一堆逗号分隔的文本文件,我想读入它们,找到一个特殊字符“X”的位置,然后在它所属的同一行中返回“Z”,以字符串类型。文本文件如下所示: "a1", "a2", "a3" "b1", "b2", "b3" "c1", "c2", "c3" ... "X", "Y", "Z" ... "n1", "n2", "n3" “X”出现的行数因文件而异。因此,我想编写一个可以应用于所有文件的函数,将“Z”作为字符串返回 我尝试了以下代码: from itertools import islice de
"a1", "a2", "a3"
"b1", "b2", "b3"
"c1", "c2", "c3"
...
"X", "Y", "Z"
...
"n1", "n2", "n3"
“X”出现的行数因文件而异。因此,我想编写一个可以应用于所有文件的函数,将“Z”作为字符串返回
我尝试了以下代码:
from itertools import islice
def _function():
z = [0,0,0]
f = open(file, 'r')
num = sum(1 for line in f)
for i in islice(f, 0, num):
x = f.readline()
y = x.find('X')
if y == -1:
pass
else:
z = f.readline().rstrip().split(',')
return z[2]
但是,当我运行代码时,结果是0,这意味着代码没有循环。
我还发现,当我使用f=open(file)
时,它只持续一行代码
我当前的版本是Anaconda上的Python 3.7。谢谢 第1期: 对于
y==-1
情况,您没有为z
提供任何值(也没有在其他任何地方提供),仅在else
情况下
那么,当y==-1
获取z[2]
时,会返回什么
本质上,您需要为该情况或之前的z
设置占位符值。占位符的更好位置是在for
循环之前设置占位符,这样就不需要在每次迭代中进行名称绑定
第二期:
您已经通过计算行数耗尽了文件对象迭代器:
num = sum(1 for line in f)
因此,当您在循环中执行f.readline()
下一步操作时,它将始终返回一个空字符串
一个简单的解决方法是查找
返回到文件的开头:
f.seek(0)
with open('file.txt') as f:
for line in f:
# Do stuffs
在num之后,进入循环之前
但这仍然不是Pythonic,最好的方法是使用for
循环对文件行进行迭代(因为文件对象是迭代器),您是否可以:
for line in f:
y = line.find('X')
...
...
当然,由于open
是一个上下文管理器,因此使用它可以自动处理文件的正确关闭:
f.seek(0)
with open('file.txt') as f:
for line in f:
# Do stuffs
(不要过多地讨论您的算法,因为这将是代码审查的问题。)在for之前,您应该定义变量z
loop@Nihal所以我在循环之前定义了z=[0,0,0]
,结果是0,这意味着代码没有循环谢谢你的评论。所以我在循环之前定义了z=[0,0,0]
,结果是0,这意味着代码没有循环。你能提供一些见解吗?