如何用Python在文本文件中找到字符串第一次出现的位置?
我正在尝试在文本文件中搜索某个字符串的第一次出现,并返回该行的所有内容,但我现在的程序却找到了字符串的最后一行并返回了它。
你有什么建议吗?
谢谢!
这是我的代码:
#Open search file as read only
with open(fullpath, 'r') as searchfile:
#Clear variable names
partname = partsize = None
#Search file for strings, trim lines and save as variables
for line in searchfile:
if "PART FILE NAME" in line:
x = line
partname = x[18:-1]
if "PART SIZE" in line:
y = line
partsize = y[18:-1]
#Open csv file, write variables, close csv file
storefile = open("C:/Documents and Settings/Desktop/blue pega3.csv", 'a')
storefile.write("%s,%s,%s\n" %(partname, partsize, fullpath))
storefile.close()
#Close search file
searchfile.close() `
5 个回答
1
抱歉来得有点晚,但我觉得这个很酷:
pattern = re.compile(r'search string')
try:
with open('search file') as inf:
# Read each line from inf, calling pattern.search(line).
# ifilter() will keep reading until it gets a match object
# instead of None. next() will either return the first
# such match object, or raise StopIteration.
match = next(itertools.ifilter(None,
(pattern.search(line)
for line in inf)))
except IOError as err:
# ...
except StopIteration:
# ...
try
/except
让事情有点复杂,但关键是那句 next()
要么返回一个 re.MatchObject
,要么抛出一个 StopIteration
的错误。
当然,像任何 MatchObject
一样,我们可以通过 match.string
来获取整个原始行。
7
你的代码返回的是最后匹配的结果,因为你在整个文件中循环,不断地覆盖partname
和partsize
的值。你可以只在它们还没有被定义的时候才去覆盖它们:
partname = partsize = None
with open(fullpath, 'r') as searchfile:
for line in searchfile:
if partname is None and "PART FILE NAME" in line:
partname = line[18:-1]
if partsize is None and "PART SIZE" in line:
partsize = line[18:-1]
if partname is not None and partsize is not None:
break
最后的if
语句会在找到这两行后停止继续循环文件,因为那时候就不需要再继续搜索了。
3
最简单的方法就是检查一下 partname
和 partsize
这两个变量是否已经有了除了 None
以外的值:
partname = partsize = None
for line in searchfile:
if partname and partsize:
break
if "PART FILE NAME" in line and partname is None:
x = line
partname = x[18:-1]
if "PART SIZE" in line and partsize is None:
y = line
partsize = y[18:-1]