問題は、 でファイルを開く方法に起因しますC:\Dropbox\
。を使用する\
と、次の文字をその文字通りの意味からエスケープするエスケープ文字として機能します。したがって、二重引用符を含む文字列を二重引用符を使用して作成したい場合は、文字列内のすべての二重引用符をエスケープする必要があります。
例えば:
変数 string 内に保持するとしますAlice told Bob "Mallory knows what we're up to"
。
それを文字列に入れると、次のようになります。
myStr = "Alice told Bob "Mallory knows what we're up to""
次に、Python は"Alice told Bob "
1 つの文字列であると見なし、そこで何をしているのかわかりませんMallory knows what we're up to
。したがって、通訳者は文句を言うでしょう。
二重引用符が文字列自体の一部であるという概念を捉えるために、次のようにエスケープする必要があります。
myStr = "Alice told Bob \"Mallory knows what we're up to\""
\
しかし、文字列の一部としてa が必要な場合はどうなるでしょうか? 次に、別のもので
エスケープする必要があります:\
\
myStr = "this is a backslash: \\"
したがって、 を開こうとすると"C:\Dropbox\somefile"
、python は 2 つのエスケープ シーケンスがあると解釈します:\D
と\s
は、その文字列内のこれらのエスケープ シーケンスの値を置換し、ファイル システムに存在しない結果のファイル名を開こうとします。これを適切にエスケープするには、次のようにする必要があります。
myfile = open("C:\\Dropbox\\somefile.txt")
ただし、これは読みにくい場合があります。したがって、生の文字列 (接頭辞がr
) を使用することをお勧めします。生の文字列は、文字列内のエスケープ シーケンスを置き換えません。
myfile = open(r"C:\Dropbox\somefile.txt")
したがってr"C:\Dropbox\somefile.txt"
、"C:\\Dropbox\\somefile.txt"
あなたがしていることについてのもう1つのコメント:os.path.join
ファイルパスの一部を一緒に結合するときに本当に使用する必要があります。あなたがするだろう一方
myfile = open('C:\\dropbox\\' + pL + file,'r')
あなたは本当にするべきです
myfile = open(os.path.join("C:\\dropbox", pL, filename),'r')
最後の注意:
変数file
やstr
その他list
の組み込み型に名前を付けないでください。これにより、インタープリターの動作が混乱し、後で望ましくない結果が生成されます。