Python 3.x 程序不';不要停止遍历列表
这个程序应该一直在文本文件Python 3.x 程序不';不要停止遍历列表,python-3.x,Python 3.x,这个程序应该一直在文本文件FIRE.txt中搜索与变量行匹配的行。当我运行它时,它可以正常工作,但是代码中应该检查列表的前四个元素是否相同,然后对下面的附加部分进行蒙皮的部分不起作用。当程序检测到字符串的前4个元素变成与文本文件中另一个字符串的前4个元素匹配的列表(行)时,它应该覆盖文本文件中的字符串。然而,当它检测到一个具有相同前4个元素的列表时,它将永远循环,并且永远不会中断 我的字符串如下所示: [‘内场上层保留529’、‘17.29美元’、‘4’、‘2’、‘175’] 我将其与如下列表进
FIRE.txt
中搜索与变量行
匹配的行。当我运行它时,它可以正常工作,但是代码中应该检查列表的前四个元素是否相同,然后对下面的附加部分进行蒙皮的部分不起作用。当程序检测到字符串的前4个元素变成与文本文件中另一个字符串的前4个元素匹配的列表(行)时,它应该覆盖文本文件中的字符串。然而,当它检测到一个具有相同前4个元素的列表时,它将永远循环,并且永远不会中断
我的字符串如下所示:
[‘内场上层保留529’、‘17.29美元’、‘4’、‘2’、‘175’]
我将其与如下列表进行比较:
[‘内场上层保留529’、‘17.29美元’、‘4’、‘2’、‘170’]
当它看到列表中的前4个元素相同时,它应该覆盖文本文件中开始的元素,但它正在循环;最新版本最新
我认为您想使用该模块。如果迭代对象而不是直接遍历文件对象,那么每一行都将作为一个列表 例如:
def gameinfo():
lines = []
html_doc = 'STATIC.html'
soup = BeautifulSoup(open(html_doc), 'html.parser')
for mytable in soup.find_all('table'):
for trs in mytable.find_all('tr'):
tds = trs.find_all('td')
row1 = [elem.text.strip() for elem in tds]
row = str(row1)
sausage = False
with open("FIRE.txt", "r+") as file:
for line in file:
if row+"\n" in line:
break
else:
if row.split(",")[:4] == line.split(",")[:4]:
print(row)
print(line)
file.write(line.replace(line+"\n", row+"\n"))
print('Already exists with diff date')
sausage = True
break
if sausage == False:
print(row.split(",")[:4])
print(line.split(",")[:4])
print(row)
print(line)
file.write(row+"\n")
print('appended')
while True:
gameinfo()
gameinfo()
或者,如果您不需要在Python以外的任何地方使用它,您可以
pickle
a将前四项的元组作为键:
import csv
row = ["this", "is", "an", "example"]
with open("FIRE.txt", "r+") as file:
reader = csv.reader(file)
for line in reader:
if row in line:
break
pass
你能修复缩进吗?对不起,我以为我在粘贴之前已经修复了。请删除
+'\n'
。文件迭代带newlinesEverywhere?当它将数据输出到我的文本文件时,当我这样做时,所有内容都在一行而不是行中。这不会破坏文件的读取,因为它会逐行读取吗?@madpysicator:对于文件中的行
保留换行符。也许你想的是str.splitlines()
?@madpysicalist是的,是的。OP对Python的一部分是如何工作的有一个有缺陷的假设,而Python的这一部分的工作方式与OP认为Python的这一部分的工作方式相同。@物理学家OP试图查看列表是否在一行中。唯一有意义的方法是,如果该行表示一个列表。CSV是我见过的最常见的格式。如果你看到OP现在在尝试什么,它与我的答案完全匹配。
import collections
import pickle
import contextlib
@contextlib.contextmanager
def mutable_pickle(path, default=object):
try:
with open(path, "rb") as f:
obj = pickle.load(f)
except IOError, EOFError:
obj = default()
try:
yield obj
finally:
with open(path, "wb") as f:
pickle.dump(obj, f)
with mutable_pickle("fire.bin",
default=collections.OrderedDict) as d:
for row in rows:
d[tuple(row[:4])] = row