python中的IOError 22在windows上无效

python中的IOError 22在windows上无效,python,windows,file,ioerror,Python,Windows,File,Ioerror,我正在用python为串行端口创建一个嗅探器,但在windows中创建CSV文件时遇到了一个问题。为了避免windows和linux之间不兼容的可能性,我在某个点上拆分了我的程序。它可以在32和64字节的linux测试中完美运行 def createNewFiles(self): # Nons allons vérifier l'existance du dossier Sniffer_Serie_Result et le créer si besoin # De même po

我正在用python为串行端口创建一个嗅探器,但在windows中创建CSV文件时遇到了一个问题。为了避免windows和linux之间不兼容的可能性,我在某个点上拆分了我的程序。它可以在32和64字节的linux测试中完美运行

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"])
创建文件夹嗅探器序列结果时没有错误 因此,此代码首先返回以下错误:

IOError:[Errno 22]无效参数:“C:\Documents and Settings\stagiaire\Sniffer\u Serie\u Result\Request\u at_uuu……实际日期和小时数.csv”

我尝试了很多像原始字符串一样的字符串,但没有任何效果

注意:我在测试中使用的windows是XP,这也需要在7上运行

我希望你能帮助我。 谢谢你的帮助


我不能在周四之前提供更多信息,目前家里没有互联网

你可能在userPath中找不到任何线索。尝试将所有\更改为/

您可能会在userPath中得到unscaped\。尝试将所有\更改为/

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"])
在这段代码中,问题是完全相同的,创建的是文件夹,而不是文件。同样的错误

在这段代码中,问题是完全相同的,创建的是文件夹,而不是文件。同样的错误

您试图在文件名中使用:个字符,而该字符在Windows中是为驱动器名保留的,例如c:/

你必须:

修改timestampWithoutMilli以使用另一个时间分隔符,如-, 全部替换:例如,在获取的时间字符串中,使用.replace替换另一个字符。 您试图在文件名中使用:个字符,而该字符在Windows中是为驱动器名保留的,例如c:/

你必须:

修改timestampWithoutMilli以使用另一个时间分隔符,如-, 全部替换:例如,在获取的时间字符串中,使用.replace替换另一个字符。

首先,使用os.path.join连接目录,而不是手动添加斜杠。其次,timestampWithSec包含什么?嗨,我将尝试这个,timstamp包含str中的时间。因此我尝试您的解决方案,但错误正是sameI的意思:请粘贴timestampWithSec的示例内容。我怀疑它只是包含了一些对Windows无效的字符。linux上的文件名示例该名称与两个系统的名称相同:Request_at_2012-08-14_14:41:30.csv,因此时间戳不完全包含:2012-08-14_14:41:30首先,使用os.path.join连接目录,而不是手动添加斜杠。其次,timestampWithSec包含什么?嗨,我将尝试这个,timstamp包含str中的时间。因此我尝试您的解决方案,但错误正是sameI的意思:请粘贴timestampWithSec的示例内容。我怀疑它只是包含了一些对Windows无效的字符。linux上的文件名示例名称与两个系统的名称相同:Request_at_2012-08-14_14:41:30.csv,因此时间戳包含的内容不完全相同:2012-08-14_14:41:30I添加了一些精度,在一个新的com中添加了代码。如果我使用os.path.abspath,则路径与以前相同,因此我尝试不使用此选项。我使用代码在新com中添加了一些精度。如果我使用os.path.abspath,路径与以前相同,因此我尝试不使用此选项。仅此而已!!!此错误发生2天。我正在测试。我不能投票对不起。。。你的回答可以帮助其他人说实话,我认为这是一个很常见的错误。我很确定我已经在这里看到了。是的,也许我在法语论坛和英语论坛上搜索,你是第一个可以帮助我的人……为了避免以后出现这种情况,请确保使用try/except让操作系统对有效的文件名进行排序。异常比classique回溯更精确?仅此而已!!!此错误发生2天。我正在测试。我不能投票对不起。。。你的回答可以帮助其他人说实话,我认为这是一个很常见的错误。我很确定我已经在这里看到了。是的,也许我在法语论坛和英语论坛上搜索,你是第一个可以帮助我的人……为了避免以后出现这种情况,请确保使用try/except让操作系统对有效文件名进行排序,或者不进行排序。异常比classique回溯更精确?