2016-08-03 8 views
-2

path + file(関数の入力)の名前にいくつかの問題があります。これは動作します:Pythonのパスと生の文字列

result=r"D:\final\Res.mat" 

これは動作しません:

result="D:\\final\\Res.mat" 

私は何をしたいことは以下の通りです(だけでなく、[Errno 22] invalid mode ('rb') or filename:に動作しません):

私はどのように
path = "D:\final" 
nameFile= "Res" 

result=''+ path+ '\\' + nameFile'mat'+'' 

""を使わずに名前の前に "r"を付ける?あるいは、パスの前にrを置かない可能性はありますか?

答えて

0

r」という接頭辞は、バックスラッシュをそのままにして文字列を「生」として評価することを示すために使用されます。

これを試してください:あなたが見ることができるように

path = r"D:\final" 
nameFile = "Res" 

result = path + '\\' + nameFile + 'mat' 

が、私は非エスケープバックスラッシュを含む文字列式の前にrを追加しました。

違いを確認するには、やってみてください:

print("\\") 
print(r"\\") 

また

、私は適切にパスを処理するために、標準ライブラリのpathlibモジュールを使用することをお勧めします(あなたはPython2を使用している場合、括弧なし) 。あなたのコードの移植をしようとする場合にも大いに役立つでしょう:

from pathlib import Path 
(Path("D:/final")/path/nameFile).with_suffix('.mat') 
0

をあなたは、パス変数の生の文字列を使用するか、またはバックスラッシュをエスケープ必要があります。

path = r"D:\final" 

あなたは違いを見ることができますここでは最初のケース'\f

>>> "D:\final" 
'D:\x0cinal' 
>>> r"D:\final" 
'D:\\final' 

は「フォームフィード文字0x0Cのです。

また、パス名を構築するためにos.path.join()を使用します。

import os.path 

path = r"D:\final" 
nameFile = "Res.mat" 

result = os.path.join(path, nameFile) 
>>> result 
'D:\\final\\Res' 

を明示的に.matnameFileにリテラル文字列を追加しているので、なぜ単に.mat拡張子を持つnameFileを定義しますか?これは動的にする必要がある場合は、ちょうどこのようにそれを追加します。

extension = '.mat' 
result = os.path.join(path, nameFile + extension) 
0

を、私は "「使用せずに、名前の前に「R」を入手するにはどうすればよいですか?

だけos.path.joinを使用します。

import os 

path = r"D:\final" 
nameFile= "Res.mat" 

result = os.path.join(path, nameFile) 
print(result) 
>> D:\final\Res.mat 
3

私の通訳は、ファイルパスを構築するため

>>> r"D:\final\Res.mat" == "D:\\final\\Res.mat" 
True 

正しい方法あなたは、2番目の例では動作しないことを、あなたの信念で間違っていることを示唆していますos.path.join関数を使用することによって行われます。この関数は複数の引数をとり、プラットフォーム間で移植可能です。私はあなたのようなものを試してみることをお勧めします

result = os.path.join(path, nameFile+".mat")