web-dev-qa-db-ja.com

pythonファイルの保存中にファイル名の単一引用符を回避する方法は?

Python拡張ファイルにファイルを保存する場合4(Linux)異常な記号を含むパーティション(これまでカバーされていない角括弧[])が含まれている場合)自動的にファイル名を引用します。

例えば:

file[].txt

として保存されます

'file[].txt'

Linuxでは、拡張4パーティション「file []。txt」が有効なファイル名です。

なぜそれが起こっているのですか?それは回避できますか?ファイル名の最初と最後の記号を削除することで回避策を作成できますが、アプリを多くのプラットフォームで実行する予定です。だから私はむしろ芽の早い段階でそれをニップしたいと思います。

Python3はAMD64プラットフォームのLinux Gentooとext4パーティションで使用されます。

pythonコード:

    print('\ndebug:triggered sf mode, name of file below \n')
    clientsocket, addr = serversocket.accept()
    filename = clientsocket.recv(10240)
    filename = filename.decode('UTF-8')
    app_output(filename)
    mode = 'valid'
    clientsocket.close()

    clientsocket, addr = serversocket.accept()
    incmdata = '1'
    somefile = open(filename, 'w+')
    somefile.close()
    while len(incmdata) !=0:
        incmdata = clientsocket.recv(1024 * 8)
        print('this is filename: ', filename)
        somefile=open(filename, 'ab')
        somefile.write(incmdata)
        somefile.close()
    app_output('file supposedly recieved')

ファイル名変数は、クライアントがミニサーバーに送信するものです(実際には、クライアントは位置変数をキャッチします)。

これは出力です:

file[].txt
this is filename:  file[].txt
this is filename:  file[].txt

また、の関連部分

ls -lah

-rw-r--r--  1 dimko dimko        269 Sep 11 10:00  file_open.txt
-rw-r--r--  1 dimko dimko         93 Sep 11 09:05  file_open.txt~
-rw-r--r--  1 dimko dimko          5 Sep 14 11:24 'file[].txt'
drwxr-xr-x  3 dimko dimko       4096 Sep 14 11:21  .idea
-rw-r--r--  1 dimko dimko       7635 Sep 14 11:20  LanSwissKnife.py
4
user57766

実際のファイル名は次のとおりです。

file[].txt

あなたのpythonプログラムはここで問題ありません。引用はlsによって行われます。

私はそれを使ってそれを再現することができました:

ls -lah --quoting-style=Shell

しかし、引用スタイルとしてliteralを選択すると、

ls -lah --quoting-style=literal

次に、[または]は引用符なしでリストされています。 lsは、システムによってデフォルトの引数が異なる場合があることに注意してください。

6
supinf

引用符で囲まれたファイル名がls -lah出力の他のファイル名と依然として整合しているという事実により、引用符はおそらくlsコマンドによって追加されたものであり、ファイル名の実際の部分ではないと思われます。目的はおそらく、「このファイル名はコマンドラインで引用符で囲む必要があります。そうしないと、予期しないことが発生する可能性があります。」

コマンドラインで同様のファイル名を作成して、何が起こるかを確認してください。

touch /tmp/file\[\].txt
ls -lah /tmp
4
telcoM

最後の2つの応答は正しかった。

GUIファイルブラウザでファイル名の元のソースを確認しましたが、問題ありません。 「ls」ユーティリティが使用されている場合にのみ発生します。したがって、python問題ではありませんでしたが、 'ls'ユーティリティの癖があります。

つまり、 'ls'コマンドは、何らかの理由で単一引用符を追加しました。元のファイルには、「ls」ユーティリティで引用符も含まれています。

皆様、ご参加ありがとうございました。

0
user57766