Python 3.10 读取播放列表文件,第一行第一个字符错误

Python 3.10 read from playlist file, wrong first character of first line

文件:main_nested.aimppl

#Name:Διάφορα εκκλησιαστικά
#Cursor:-1
#Flags:2047
#Group:/home/chris/Documents/papinhio-player/src/python+/menu-1/playlists/test-playlists/mp3/|1
#Track:1|/home/chris/Documents/papinhio-player/src/python+/menu-1/playlists/test-playlists/mp3/ΥΜΝΟΙ/ΑΓΙΟΙ ΑΓΓΕΛΟΙ.mp3||||ΑΓΙΟΙ ΑΓΓΕΛΟΙ|0|0|||0|0|0|
#Track:1|/home/chris/Documents/papinhio-player/src/python+/menu-1/playlists/test-playlists/mp3/ΥΜΝΟΙ/Αγνή Παρθένε Δέσποινα.mp3||||Αγνή Παρθένε Δέσποινα|0|0|||0|0|0|
#Track:1|/home/chris/Documents/papinhio-player/src/python+/menu-1/playlists/test-playlists/.aimppl/nested/ΑΝΑΣΤΑΣΙΜΑ.aimppl||||ΑΝΑΣΤΑΣΙΜΑ|0|0|||0|0|0|
#Track:1|/home/chris/Documents/papinhio-player/src/python+/menu-1/playlists/test-playlists/.aimppl/nested/ΥΜΝΟΙ.aimppl||||ΥΜΝΟΙ|0|0|||0|0|0|

文件:read_playlist_file.py

import os
import sys

with open("main_nested.aimppl") as f:
    lines = f.readlines()
    for line in lines:
        print(line[0])

输出:

chris@chris-Inspiron-3847:~/Desktop$ python3 read_playlist_file.py 

#
#
#
#
#
#
#

预期输出:

chris@chris-Inspiron-3847:~/Desktop$ python3 read_playlist_file.py 
#
#
#
#
#
#
#
#

正如您在第一行中看到的那样,没有# print。

此文件是从 python3.10 创建的。 也许你无法重现这个问题。 可能是utf-bom字符问题。

此代码有效:

import io

f = io.open('main_nested.aimppl', 'rt', encoding='utf_8_sig')
lines = f.readlines()
for line in lines:
    print(line[0])

第一个代码有什么问题,合适的解决方案是什么?

“可能是 utf-bom 性格问题。”对,就是那样。您可以使用例如检查您的文件hexdump -c 在命令行上。如果是 utf8-with-BOM 文件,前 3 个字节应该是 0xEF、0xBB、0xBF。

“什么是合适的解决方案?”你所做的是完全正确的。 encoding='utf_8_sig' 用于 utf8-with-BOM 文件。