2

Pythonでシリアルポート用のスニファーを作成していますが、WindowsでCSVファイルを作成するときに問題があります。Windows と Linux 間の非互換性の可能性を回避するために、ある時点でプログラムを分割しました。Linux で完全に動作します (32 および 64 バイトでテスト)。

def createNewFiles(self):
    # Nons allons vérifier l'existance du dossier Sniffer_Serie_Result et le créer si besoin
    # De même pour le fichier csv
    if (os.name == "nt"): # pour windows
        self.userPath = os.getenv('HOME') or os.getenv('USERPROFILE')
        self.folderPath= os.path.abspath(self.userPath + "\\Sniffer_Serie_Result")
        #exist_ok=True ==> cree le dossier si il n'existe pas
        os.makedirs(self.folderPath,exist_ok=True)
        self.timestampWithSec= self.timestampWithoutMilli() # utilisé dans les noms de fichier
        self.filePathRequest= os.path.abspath(self.folderPath + "\\Request_at_" + self.timestampWithSec + ".csv")
        self.filePathResponse= os.path.abspath(self.folderPath + "\\Response_at_" + self.timestampWithSec + ".csv")
        self.filePathOverall = os.path.abspath(self.folderPath + "\\Overall_result_at_" + self.timestampWithSec + ".csv")
        with open(self.filePathRequest, 'w') as f:
            writer = csv.writer(f)
            writer.writerow(["Kind of message","Timestamp","Message Hexa","Message ASCII"]) 
        with open(self.filePathResponse, 'w') as f:
            writer = csv.writer(f)
            writer.writerow(["Kind of message","Timestamp","Message Hexa","Message ASCII"])

フォルダー Sniffer_Serie_Result はエラーなしで作成されるため、このコードは最初に次のエラーを返します。

IOError: [Errno 22] 無効な引数: 'C:\Documents and Settings\stagiaire\Sniffer_Serie_Result\Request_at_......(実際の日付と時間).csv'

生の文字列のように多くの文字列を試してみましたが、何も機能しません。

注: テストに使用する Windows は XP です。これは 7 でも動作する必要があります。

あなたが私を助けてくれることを願っています。助けてくれてありがとう!

木曜日までにこれ以上の情報を提供することはできません (当面の間、家にインターネットはありません)

4

3 に答える 3

2

:ファイル名に文字を使用しようとしていますが、その文字は Windows でドライブ名として予約されています (例: c:/)。

次のいずれかを行う必要があります。

  1. timestampWithoutMilli()別の時間区切り記号 ( など-)を使用するように変更します。
  2. たとえば、取得した時刻文字列のすべて:を別の文字に ( を使用して.replace()) 置き換えます。
于 2012-08-16T09:04:00.023 に答える
0

userPath で \ がエスケープされていない可能性があります。すべての \ を / に変更してみてください。

于 2012-08-14T15:23:43.053 に答える
-1
def createNewFiles(self):
        # Nons allons vérifier l'existance du dossier Sniffer_Serie_Result et le créer si besoin
        # De même pour le fichier csv
        if (os.name == "nt"): # pour windows
            self.userPath = os.getenv('HOME') or os.getenv('USERPROFILE')
            self.folderPath= self.userPath + "/Sniffer_Serie_Result"
            #exist_ok=True ==> cree le dossier si il n'existe pas
            os.makedirs(self.folderPath,exist_ok=True)
            self.timestampWithSec= self.timestampWithoutMilli() # utilisé dans les noms de fichier
            self.filePathRequest= self.folderPath + "/Request_at_" + self.timestampWithSec + ".csv"
            self.filePathResponse= self.folderPath + "/Response_at_" + self.timestampWithSec + ".csv"
            self.filePathOverall = self.folderPath + "/Overall_result_at_" + self.timestampWithSec + ".csv"
            with open(self.filePathRequest, 'w') as f:
                writer = csv.writer(f)
                writer.writerow(["Kind of message","Timestamp","Message Hexa","Message ASCII"]) 
            with open(self.filePathResponse, 'w') as f:
                writer = csv.writer(f)
                writer.writerow(["Kind of message","Timestamp","Message Hexa","Message ASCII"])

このコードでは、問題はまったく同じです。フォルダーは作成されますが、ファイルは作成されません。同じエラーで。

于 2012-08-16T06:45:08.557 に答える