如何让 pool.py 接受非 ascii 字符?
How to get pool.py to accept non ascii characters?
我正在使用 Python 2.7.18
这个想法是使用 python 从指定目录收集歌曲,然后通过一堆转换器和声音处理器创建和 运行 命令 运行 它们。
我的一些歌曲有带有重音的字符和任何带有?标题中的更改为文件名中的 ¿(倒问号)。
我的 convert_song 函数在 运行 时正常工作,但是当我尝试在池中 运行 它并且文件名或目录中包含非 ascii 字符时,它失败:
Traceback (most recent call last):
File "C:\StreamLine.py", line 270, in <module>
result = pool.map(convert_song, qTheStack)
File "C:\Python27\lib\multiprocessing\pool.py", line 253, in map
return self.map_async(func, iterable, chunksize).get()
File "C:\Python27\lib\multiprocessing\pool.py", line 572, in get
raise self._value
UnicodeEncodeError: 'ascii' codec can't encode character u'\xbf' in position 27: ordinal not in range(128)
这是我设置游泳池的主要位置:
if __name__ == '__main__':
print('Reading artists.')
predir = 'G:\Vault\The Music\'
artistfile = open('C:\Controls\ArtistList.txt', 'r')
artistlist = artistfile.readlines()
dirs = []
for artist in artistlist:
dirs.append(predir + artist.strip())
qTheStack = []
for currentPath in dirs:
for wFile in generate_next_file(currentPath):
print(repr(wFile))
#print(convert_song(wFile))
qTheStack.append(wFile)
print('List loaded.')
pool = Pool(12)
result = pool.map(convert_song, qTheStack)
for item in result:
print(item)
当 运行:
时打印(repr(wFile)) 看起来像这样
'G:\Vault\The Music\Chicago\1989 - Greatest Hits 1982-1989\04 - Will You Still Love Me\xbf.flac'
'G:\Vault\The Music\Chicago\1989 - Greatest Hits 1982-1989\06 - What Kind of Man Would I Be\xbf [Remix].flac'
如何从多处理中获取 built-in 池以接受我的输入?
改为Python3,老兄。
尽管我希望在 Python 2.7 上有一个答案,但我尝试了 Python 3,结果并不令人失望。
我确实必须返回 obscure steps 我发现生成一个文件 运行 一个 COM/DLL in Python,我不得不删除所有 str.decode 并在我的脚本中对调用进行编码。仅一次导入更改后,我按预期点击了 运行 和 运行。
我正在使用 Python 2.7.18 这个想法是使用 python 从指定目录收集歌曲,然后通过一堆转换器和声音处理器创建和 运行 命令 运行 它们。 我的一些歌曲有带有重音的字符和任何带有?标题中的更改为文件名中的 ¿(倒问号)。
我的 convert_song 函数在 运行 时正常工作,但是当我尝试在池中 运行 它并且文件名或目录中包含非 ascii 字符时,它失败:
Traceback (most recent call last):
File "C:\StreamLine.py", line 270, in <module>
result = pool.map(convert_song, qTheStack)
File "C:\Python27\lib\multiprocessing\pool.py", line 253, in map
return self.map_async(func, iterable, chunksize).get()
File "C:\Python27\lib\multiprocessing\pool.py", line 572, in get
raise self._value
UnicodeEncodeError: 'ascii' codec can't encode character u'\xbf' in position 27: ordinal not in range(128)
这是我设置游泳池的主要位置:
if __name__ == '__main__':
print('Reading artists.')
predir = 'G:\Vault\The Music\'
artistfile = open('C:\Controls\ArtistList.txt', 'r')
artistlist = artistfile.readlines()
dirs = []
for artist in artistlist:
dirs.append(predir + artist.strip())
qTheStack = []
for currentPath in dirs:
for wFile in generate_next_file(currentPath):
print(repr(wFile))
#print(convert_song(wFile))
qTheStack.append(wFile)
print('List loaded.')
pool = Pool(12)
result = pool.map(convert_song, qTheStack)
for item in result:
print(item)
当 运行:
时打印(repr(wFile)) 看起来像这样'G:\Vault\The Music\Chicago\1989 - Greatest Hits 1982-1989\04 - Will You Still Love Me\xbf.flac'
'G:\Vault\The Music\Chicago\1989 - Greatest Hits 1982-1989\06 - What Kind of Man Would I Be\xbf [Remix].flac'
如何从多处理中获取 built-in 池以接受我的输入?
改为Python3,老兄。
尽管我希望在 Python 2.7 上有一个答案,但我尝试了 Python 3,结果并不令人失望。 我确实必须返回 obscure steps 我发现生成一个文件 运行 一个 COM/DLL in Python,我不得不删除所有 str.decode 并在我的脚本中对调用进行编码。仅一次导入更改后,我按预期点击了 运行 和 运行。