我正在编写一个Python代码,其中一个Python脚本打印所有的RGB值,而另一个Python脚本不断地读取它。 注意:它们都在单独的 python 文件中! 当第一个脚本完成打印所有 rgb 值时,我不知道如何在打印完所有值后打印完成。然后我正在处理下一个脚本,读取文件,即使我将完成放入txt文件中,我也无法让它停止。请帮助我。
第一个文件(类型RGB值)
def generatergbvalues():
rgb_values = []
for r in range(256):
for g in range(256):
for b in range(256):
rgb_values.append((r, g, b))
return rgb_values
def run():
rgb_values = generatergbvalues()
# Print the RGB values
for value in rgb_values:
file = open ('Python/Color/colors.txt', 'a+')
file.write(str(value))
file.write('\n')
print(value)
if __name__ == "__main__":
run()
这会打印 rgb 值,一切正常,但我需要它在所有 rgb 值都达到时打印完成。
第二个文件(读取RGB值)
done = False
def read(done):
file = open ('Python/Color/colors.txt', 'r')
data = file.read()
datalist = data.replace('\n', '/').split('/')
print(datalist)
i = "done"
if i in datalist:
done == True
while done == False:
read(done)
if done == True:
break
它可以很好地读取colors.txt 文件,但在它看到“完成”一词后我无法停止它。它永远持续下去。
colors.txt(包含所有 rgb 值的文件[示例])
(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 0, 4)
(0, 0, 5)
(0, 0, 6)
(0, 0, 7)
(0, 0, 8)
(0, 0, 9)
(0, 0, 10)
(0, 0, 11)
(0, 0, 12)
(0, 0, 13)
(0, 0, 14)
(0, 0, 15)
(0, 0, 16)
(0, 0, 17)
(0, 0, 18)
(0, 0, 19)
(0, 0, 20)
(0, 0, 21)
(0, 0, 22)
(0, 0, 23)
done
这只是有 23 个值并在代码中完成的 color.txt 的示例。
这里有很多东西需要解开。我将根据您提供的代码将这个答案分为两部分。我假设你是 python 的初学者,我会尝试这样构建我的答案。
在不做太多改变的情况下改进你的代码,它可能看起来像这样:
def generatergbvalues():
rgb_values = []
for r in range(256):
for g in range(256):
for b in range(256):
rgb_values.append((r, g, b))
return rgb_values
def run():
rgb_values = generatergbvalues()
# Print the RGB values
file = open("Python/Color/colors.txt", "w")
for value in rgb_values:
file.write(str(value))
file.write('\n')
file.write("done")
file.close()
if __name__ == "__main__":
run()
请特别注意以下变化:
如果您想稍后查看更多高级提示:
with
语法打开文件,以避免需要关闭它。你让这部分过于复杂化了。如果您的目标是读取列表并一一打印值,您可以通过以下简单的操作来实现:
def read():
file = open('Python/Color/colors.txt', 'r')
data = file.read()
for rgb_item in data.split('\n'):
# do something with the data here
print(rgb_item)
file.close()
if __name__ == '__main__':
read()
读取整个文件后,这将停止。
您的代码没有停止,因为
done
不是全局变量,因为您在分配中存在拼写错误(==
是比较,=
是赋值)并且因为每个周期都会读取整个文件。
如果您想逐行读取文件并在每次点击“完成”字符串时停止它,它看起来像这样:
def read():
file = open('Python/Color/colors.txt', 'r')
data = file.read()
for rgb_item in data.split('\n'):
# do something with the data here
if rgb_item == "done":
break
print(rgb_item)
file.close()
if __name__ == '__main__':
read()
我觉得你不太清楚这里打开和关闭文件的概念,我建议进一步研究。
我不确定我是否理解了你的所有问题,但这里有一个在找到“done”字符串时停止循环的解决方案:
def find_done():
file = open ('colors.txt', 'r')
data = file.read()
datalist = data.replace('\n', '/').split('/')
print(datalist)
i = "done"
if i in datalist:
return True
while True:
if find_done():
break