Chinese character error

J

John Deas

Hi,

I made a small script to recursively copy files from a directory tree
to an exportDir only if they have an mp3 extension :

a=os.walk(os.getcwd())
for root, dirs, files in a:
for currFile in files:
pathCurrFile=os.path.join(root, currFile)
if mp3Reg.search(pathCurrFile):
shutil.copy(pathCurrFile,exportDir)
else:
print pathCurrFile

The problem is that I get stuck with files containing name in
Chinese :

Traceback (most recent call last):
File "/cygdrive/c/Documents and Settings/vku/Mes documents/Ma
musique/iTunes/i
Tunes Music/script.py", line 21, in <module>
shutil.copy(pathCurrFile,exportDir)
File "/usr/lib/python2.5/shutil.py", line 80, in copy
copyfile(src, dst)
File "/usr/lib/python2.5/shutil.py", line 46, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: '/cygdrive/c/Documents
and Setting
s/vku/Mes documents/Ma musique/iTunes/iTunes Music/Podcasts/Learn
Chinese - Chin
esePod/785 Advanced - ????.mp3'

I am using python on cygwin, so could this be the source of the error,
and is there a way to fix this ?
 
C

Chris

Hi,

I made a small script to recursively copy files from a directory tree
to an exportDir only if they have an mp3 extension :

a=os.walk(os.getcwd())
for root, dirs, files in a:
for currFile in files:
pathCurrFile=os.path.join(root, currFile)
if mp3Reg.search(pathCurrFile):
shutil.copy(pathCurrFile,exportDir)
else:
print pathCurrFile

The problem is that I get stuck with files containing name in
Chinese :

Traceback (most recent call last):
File "/cygdrive/c/Documents and Settings/vku/Mes documents/Ma
musique/iTunes/i
Tunes Music/script.py", line 21, in <module>
shutil.copy(pathCurrFile,exportDir)
File "/usr/lib/python2.5/shutil.py", line 80, in copy
copyfile(src, dst)
File "/usr/lib/python2.5/shutil.py", line 46, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: '/cygdrive/c/Documents
and Setting
s/vku/Mes documents/Ma musique/iTunes/iTunes Music/Podcasts/Learn
Chinese - Chin
esePod/785 Advanced - ????.mp3'

I am using python on cygwin, so could this be the source of the error,
and is there a way to fix this ?

It has to do with the way the OS reports the filename. Explorers GUI
diplays it as square blocks and both CmdPrompt + Cygwin display it as
Question marks as does the os.listdir in Python. Copying Chinese
Characters and checking their Ordinal Values directly from python gave
me for eg. 230+188+162 for 1 Chinese Charater yet Python shows it is
Ordinal 63 (a Question Mark) after reading the filename.

Those files you will need to manually copy, I even tried
find /cygdrive/d/Temp/ -name "*.mp3" -exec cp {} /cygdrive/d/Temp/
test/ \;
which yielded
cp: cannot stat '/cygdrive/d/Temp/??.mp3': No such file or directory
 
M

Mark Tolonen

Chris said:
Hi,

I made a small script to recursively copy files from a directory tree
to an exportDir only if they have an mp3 extension :

a=os.walk(os.getcwd())
for root, dirs, files in a:
for currFile in files:
pathCurrFile=os.path.join(root, currFile)
if mp3Reg.search(pathCurrFile):
shutil.copy(pathCurrFile,exportDir)
else:
print pathCurrFile

The problem is that I get stuck with files containing name in
Chinese :

Traceback (most recent call last):
File "/cygdrive/c/Documents and Settings/vku/Mes documents/Ma
musique/iTunes/i
Tunes Music/script.py", line 21, in <module>
shutil.copy(pathCurrFile,exportDir)
File "/usr/lib/python2.5/shutil.py", line 80, in copy
copyfile(src, dst)
File "/usr/lib/python2.5/shutil.py", line 46, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: '/cygdrive/c/Documents
and Setting
s/vku/Mes documents/Ma musique/iTunes/iTunes Music/Podcasts/Learn
Chinese - Chin
esePod/785 Advanced - ????.mp3'

I am using python on cygwin, so could this be the source of the error,
and is there a way to fix this ?

It has to do with the way the OS reports the filename. Explorers GUI
diplays it as square blocks and both CmdPrompt + Cygwin display it as
Question marks as does the os.listdir in Python. Copying Chinese
Characters and checking their Ordinal Values directly from python gave
me for eg. 230+188+162 for 1 Chinese Charater yet Python shows it is
Ordinal 63 (a Question Mark) after reading the filename.

Those files you will need to manually copy, I even tried
find /cygdrive/d/Temp/ -name "*.mp3" -exec cp {} /cygdrive/d/Temp/
test/ \;
which yielded
cp: cannot stat '/cygdrive/d/Temp/??.mp3': No such file or directory

If you call os.walk() with a Unicode string, it's return values will be
Unicode as well and you should be able to process files with non-ASCII
characters. This worked for me (on Windows):

import os
import shutil
import fnmatch

exportDir = u'c:\\mp3s'

a=os.walk(os.getcwdu()) # Unicode version of os.getcwd()
for root, dirs, files in a:
for currFile in files:
pathCurrFile=os.path.join(root, currFile)
if fnmatch.fnmatch(pathCurrFile,u'*.mp3'):
shutil.copy(pathCurrFile,exportDir)
else:
print pathCurrFile

--Mark
 
J

John Deas

Hi,
I made a small script to recursively copy files from a directory tree
to an exportDir only if they have an mp3 extension :
a=os.walk(os.getcwd())
for root, dirs, files in a:
for currFile in files:
pathCurrFile=os.path.join(root, currFile)
if mp3Reg.search(pathCurrFile):
shutil.copy(pathCurrFile,exportDir)
else:
print pathCurrFile
The problem is that I get stuck with files containing name in
Chinese :
Traceback (most recent call last):
File "/cygdrive/c/Documents and Settings/vku/Mes documents/Ma
musique/iTunes/i
Tunes Music/script.py", line 21, in <module>
shutil.copy(pathCurrFile,exportDir)
File "/usr/lib/python2.5/shutil.py", line 80, in copy
copyfile(src, dst)
File "/usr/lib/python2.5/shutil.py", line 46, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: '/cygdrive/c/Documents
and Setting
s/vku/Mes documents/Ma musique/iTunes/iTunes Music/Podcasts/Learn
Chinese - Chin
esePod/785 Advanced - ????.mp3'
I am using python oncygwin, so could this be the source of the error,
and is there a way to fix this ?
It has to do with the way the OS reports the filename. Explorers GUI
diplays it as square blocks and both CmdPrompt +Cygwindisplay it as
Question marks as does the os.listdir in Python. Copying Chinese
Characters and checking their Ordinal Values directly from python gave
me for eg. 230+188+162 for 1 Chinese Charater yet Python shows it is
Ordinal 63 (a Question Mark) after reading the filename.
Those files you will need to manually copy, I even tried
find /cygdrive/d/Temp/ -name "*.mp3" -exec cp {} /cygdrive/d/Temp/
test/ \;
which yielded
cp: cannot stat '/cygdrive/d/Temp/??.mp3': No such file or directory

If you call os.walk() with a Unicode string, it's return values will be
Unicode as well and you should be able to process files with non-ASCII
characters. This worked for me (on Windows):

import os
import shutil
import fnmatch

exportDir = u'c:\\mp3s'

a=os.walk(os.getcwdu()) # Unicode version of os.getcwd()
for root, dirs, files in a:
for currFile in files:
pathCurrFile=os.path.join(root, currFile)
if fnmatch.fnmatch(pathCurrFile,u'*.mp3'):
shutil.copy(pathCurrFile,exportDir)
else:
print pathCurrFile

--Mark

Hi,

I tried to play around with the advice you gave me.

When I do this in the directory containing an unicode-named mp3:

import os, shutil
os.listdir(os.getcwdu())

I get :

[u'The Pixies - Where is my mind (fight club).mp3', u'???.mp3']

Than, if try to copy it with :

shutil.copy(os.listdir(os.getcwdu())[1],u'test.mp3')

I get :

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/shutil.py", line 80, in copy
copyfile(src, dst)
File "/usr/lib/python2.5/shutil.py", line 46, in copyfi
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: u'???.mp3'

Have you any idea why this is not working on my computer ?

Tanks,

John Deas
 
M

Martin v. Löwis

Have you any idea why this is not working on my computer ?

Can you please try the listdir operation with the Python distribution
from python.org instead of Cygwin Python?

Regards,
Martin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,019
Latest member
RoxannaSta

Latest Threads

Top