无法从文本文件中读取文件名字符串

时间:2019-12-02 05:49:53

标签: python

我正在尝试进行幻灯片放映,并将所有图像路径存储在1个文本文件中,以使主代码更清晰一些, 这是主要代码:

import tkinter as tk
from itertools import cycle
from PIL import ImageTk, Image

images = open('list.txt', 'r').read()
print(images)

photos = cycle(ImageTk.PhotoImage(Image.open(image)) for image in images)

def slideShow():
  img = next(photos)
  displayCanvas.config(image=img)
  root.after(1200, slideShow) 

root = tk.Tk()
root.overrideredirect(True)
width = root.winfo_screenwidth()
height = root.winfo_screenwidth()
root.geometry('%dx%d' % (1600, 900))
displayCanvas = tk.Label(root)
displayCanvas.pack()
root.after(1000, lambda: slideShow())
root.mainloop()

这是列表文件的下载文件,以防万一需要重新格式化或进行以下操作:https://drive.google.com/open?id=17PzCCf6DK9L-8q4ZxVe7bPD1kFlIuZts

当我尝试运行代码时,我当前收到此错误 FileNotFoundError: [Errno 2] No such file or directory: '[' 我尝试过用不同的方式格式化它,但第一个字符是什么,然后“没有这样的文件或目录”,一切都没有效果

5 个答案:

答案 0 :(得分:1)

只需更换

images = open('list.txt', 'r').read()
print(images)

使用

images =[]
with open('list.txt', 'r') as f:
    lines = f.read().strip('[]')
    images = [i.strip("\" ") for i in lines.split(',')]

您的文本文件格式不同。我要做的就是剥离[]的文本文件,然后用,分隔符将它们分割,然后删除尾随的空格和"
希望对您有所帮助:)

答案 1 :(得分:0)

您要在文件上调用.read(),该文件会将所有内容加载到字符串中。

然后,您逐个字符地遍历字符串,尝试将字符作为图像打开

如果每行都有名字,那么就需要这个

with open('list.txt', 'r') as f:
    images = f.readlines()
    print(images)
    photos = cycle(ImageTk.PhotoImage(Image.open(image.rstrip())) for image in images)

如果文件的格式有所不同,则需要首先将其解析为图像文件名列表

答案 2 :(得分:0)

open('list.txt', 'r').read()

这会将 entire 文件读取为单个字符串,而无需注意该字符串的实际外观。

cycle(ImageTk.PhotoImage(Image.open(image)) for image in images)

这尝试使用images的每个元素进行Image.open调用。由于images是单个字符串(由上一行生成),因此其元素是该字符串的单个字符(以1个字符的字符串表示)。因此,'['是第一个。

似乎您希望将列表的字符串表示形式写入文件,然后通过读取文件自动获得实际对应的列表。这是行不通的。您需要实际解释文件内容才能构建列表。

答案 3 :(得分:0)

您偶然创建了JSON文件,可以使用模块json将其转换回Python的列表

import json

images = json.loads(open('list.txt').read())

print(images[0])

答案 4 :(得分:0)

1。

import json

with open('../resources/list.txt') as list_file:
    list_res = json.load(list_file)

2。

from ast import literal_eval

with open('../resources/list.txt') as list_file:
    list_res = literal_eval(list_file.read())