1

引数として送信されたファイルパスの解析に問題があります:

私が入力した場合:

os.path.normpath('D:\Data2\090925')

私は得る

'D:\\Data2\x0090925'

明らかに、フォルダー名の \0 はフォーマットを混乱させています。次の方法で修正できます。

os.path.normpath(r'D:\Data2\090925')

を与える

'D:\\Data2\\090925'

私の問題は、sys.argv で同じ結果を得るにはどうすればよいですか? すなわち:

os.path.normpath(sys.argv[1])

sys.argv を raw モードで os.path.normpath() にフィードして、フォルダーがゼロで始まる問題を回避する方法が見つかりません!

また、スクリプトにpython script.py D:/Data2/090925.それを避けます。

補足する UPDATE1: スクリプト test.py を使用する場合:

import os, sys 
if __name__ == '__main__': 
    print 'arg 1: ',sys.argv[1] 
    print 'arg 1 (normpath): ',os.path.normpath(sys.argv[1]) 
    print 'os.path.dirname :', os.path.dirname(os.path.normpath(sys.argv[1])) 

私は以下を取得します:

C:\Python>python test.py D:\Data2\091002\ 
arg 1: D:\Data2\091002\ 
arg 1 (normpath): D:\Data2\091002 
os.path.dirname : D:\Data2 

例: 091002 を失いました...

UPDATE2 : 以下のコメントで通知されたように、normpath が削除されたときに私が示した例で問題が解決されました。

import os, sys 
if __name__ == '__main__': 
    print 'arg 1: ',sys.argv[1] 
    print 'os.path.dirname :', os.path.dirname(sys.argv[1])
    print 'os.path.split(sys.argv[1])):', os.path.split(sys.argv[1])

これにより、次のことが得られます。

 C:\Python>python test.py D:\Data2\091002\ 
arg 1: D:\Data2\091002\ 
os.path.dirname : D:\Data2\091002
os.path.split : ('D:\\Data2\\090925', '')

D:\Data2\091002 を使用する場合:

 C:\Python>python test.py D:\Data2\091002
arg 1: D:\Data2\091002 
os.path.dirname : D:\Data2
os.path.split : ('D:\\Data2', '090925')

これは私が扱うことができるものです: ありがとう!

4

2 に答える 2

5

パスの最後の部分を「失う」ことは、sys.argv.

os.path.normpath()を使用してから を使用すると、予期される動作になりos.path.dirname()ます。

>>> import os
>>> os.path.normpath("c:/foo/bar/")
'c:\\foo\\bar'
>>> os.path.dirname('c:\\foo\\bar')
'c:\\foo'
于 2009-12-06T14:32:51.430 に答える
0

ディレクトリ パスの末尾にバックスラッシュを追加する Python コードのスニペットを次に示します。

def add_path_slash(s_path):
    if not s_path:
        return s_path
    if 2 == len(s_path) and ':' == s_path[1]:
        return s_path  # it is just a drive letter
    if s_path[-1] in ('/', '\\'):
        return s_path
    return s_path + '\\'
于 2009-12-06T19:42:57.933 に答える