os.stat遇到中文的時候報錯

1,346 views
Skip to first unread message

halida

unread,
May 21, 2009, 9:00:02 PM5/21/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
我用:
os.stat(filename) 查詢文件時間。

但是當文件名中含有中文時:
filename = "D:\test\pythondel\testdir\t\新增文字文件.txt"

系統提示報錯,
WindowsError: [Error 123] 檔案名稱、目錄名稱或磁碟區標籤語法錯誤。: 'D:\test\\py
thondel\testdir\t\\\xb7s\xbcW\xa4\xe5\xa6r\xa4\xe5\xa5\xf3.txt'

但是使用
notepad "D:\test\pythondel\testdir\t\新增文字文件.txt" 可以打開,不知道為什么?

Rainbird

unread,
May 21, 2009, 9:10:54 PM5/21/09
to pyth...@googlegroups.com
try:
filename = r"D:\test\pythondel\testdir\t\新增文字文件.txt"

2009/5/22 halida <linjun...@gmail.com>

Heroboy

unread,
May 21, 2009, 10:05:18 PM5/21/09
to pyth...@googlegroups.com
#coding=utf8
filename = u'xxxxxxxxxxxxxx'.encode('mbcs')
filename = 'xxxxxxxxxx'.decode('utf8').encode('mbcs')

2009/5/22 halida <linjun...@gmail.com>

halida

unread,
May 21, 2009, 10:47:42 PM5/21/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
不過,我這邊的filename不是r的,如何轉呢?

On May 22, 9:10 am, Rainbird <chinakapal...@gmail.com> wrote:
> try:
> filename = r"D:\test\pythondel\testdir\t\新增文字文件.txt"
>

> 2009/5/22 halida <linjunhal...@gmail.com>

halida

unread,
May 21, 2009, 10:57:32 PM5/21/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
我的意思是,filename字符串是動態生成的,如何轉變為raw的格式?

袁雁波

unread,
May 21, 2009, 11:00:17 PM5/21/09
to pyth...@googlegroups.com
a="str"
b=r"%s"%a

2009/5/22 halida <linjun...@gmail.com>

halida

unread,
May 21, 2009, 11:13:31 PM5/21/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
還有一個很奇怪的問題,
os.stat(r'D:\新增文字文件.txt')可以,
os.stat(r'"D:\新增文字文件.txt"')不行。

但是如果不加",
os.stat(r'D:\新增文 字文件.txt')就會報錯,(該文件名中含有空格。。。)

On May 22, 11:00 am, 袁雁波 <yanbo.y...@gmail.com> wrote:
> a="str"
> b=r"%s"%a
>

> 2009/5/22 halida <linjunhal...@gmail.com>

Jiahua Huang

unread,
May 22, 2009, 2:36:44 AM5/22/09
to pyth...@googlegroups.com
2009/5/22 halida <linjun...@gmail.com>:

注意你的 Python 版本,

有些 windows 版 Python 使用 unicode api,

文件操作需要使用 unicode 字符串,

比如 os.stat(u"D:\\新增文字文件.txt")


不过,你的问题恐怕更多是忽视了字符串转义,
你的 "D:\test\pythondel\testdir\t\新增文字文件.txt"
里边有个 "\t" ,
会被转义为 Tab 制表符
>>> print filename
D: est\pythondel estdir \新增文字文件.txt

这当然就是不合法的路径,
你需要在 "" 里用 \\ 来表示 \


filename = u"D:\\test\\pythondel\\testdir\\t\\新增文字文件.txt"
os.stat(filename)

halida

unread,
May 22, 2009, 2:58:08 AM5/22/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
因為我這邊的需求,是搜索并刪除文件,根據文件建立時間。
有些文件是big5的,有些是gb的,甚至還有一些奇怪的編碼,
我對這方面的了解不是很多(編碼知道,但是python和windows如何處理他們的就不知道)
有什么方法可以搞懂這些東西?

On May 22, 2:36 pm, Jiahua Huang <jhuangjia...@gmail.com> wrote:
> 2009/5/22 halida <linjunhal...@gmail.com>:

halida

unread,
May 22, 2009, 2:59:40 AM5/22/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
還有就是,我上面的例子寫錯了,\t在我程序里面是處理掉的,
但還是報錯。。。

WindowsError: [Error 123] 檔案名稱、目錄名稱或磁碟區標籤語法錯誤。: '"D:\\test\\pythondel\
\testdir\\\\t\\\xb7s\xbcW\xa4\xe5\xa6r\xa4\xe5\xa5\xf3.txt"'

On May 22, 2:36 pm, Jiahua Huang <jhuangjia...@gmail.com> wrote:
> 2009/5/22 halida <linjunhal...@gmail.com>:
>

Jiahua Huang

unread,
May 22, 2009, 3:24:28 AM5/22/09
to pyth...@googlegroups.com
2009/5/22 halida <linjun...@gmail.com>:

> 因為我這邊的需求,是搜索并刪除文件,根據文件建立時間。
> 有些文件是big5的,有些是gb的,甚至還有一些奇怪的編碼,
> 我對這方面的了解不是很多(編碼知道,但是python和windows如何處理他們的就不知道)
> 有什么方法可以搞懂這些東西?
>

就用 unicode 字符串就好,
别理会 gb18030 还是 big5。

如果你的 python 版本不是 unicode 的,就换一个吧。

halida

unread,
May 22, 2009, 4:54:37 AM5/22/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
問題是文件名稱的編碼很亂,如果和系統的不一致,os.stat就會報錯,暈死了。

On May 22, 3:24 pm, Jiahua Huang <jhuangjia...@gmail.com> wrote:
> 2009/5/22 halida <linjunhal...@gmail.com>:
>

Reply all
Reply to author
Forward
0 new messages