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 文件。
文件: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 文件。