Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 程序不';不要停止遍历列表_Python 3.x - Fatal编程技术网

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