Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';无效参数';错误和python不读取文件_Python_File - Fatal编程技术网

';无效参数';错误和python不读取文件

';无效参数';错误和python不读取文件,python,file,Python,File,我试图编写一段代码,在一个文本文件中取两个数字,然后将它们分开,将答案显示为一个重分数。当我在程序中输入自己的值时,我已经让分数部分工作,但我无法让程序识别文本文件。我曾尝试将它们放在同一个目录中,并将文件的完整系统路径放在同一个目录中,但到目前为止没有任何效果。现在我只是想把文件的内容打印出来 with open('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.4\topheavy.txt','w') as f:

我试图编写一段代码,在一个文本文件中取两个数字,然后将它们分开,将答案显示为一个重分数。当我在程序中输入自己的值时,我已经让分数部分工作,但我无法让程序识别文本文件。我曾尝试将它们放在同一个目录中,并将文件的完整系统路径放在同一个目录中,但到目前为止没有任何效果。现在我只是想把文件的内容打印出来

with open('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.4\topheavy.txt','w') as f:
    for line in f:
        for word in line.split():
            print(word)      
然后,我会将这两个值指定给x和y,但我得到以下错误:

Traceback (most recent call last):
File "C:\Python34\divider.py", line 2, in <module>
open('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.4\topheavy.txt','w')
OSError: [Errno 22] Invalid argument:'C:\\ProgramData\\Microsoft\\Windows\\Startmenu\\Programs\\Python 3.4\topheavy.txt'
回溯(最近一次呼叫最后一次):
文件“C:\Python34\divider.py”,第2行,在
打开('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.4\topheavy.txt','w')
OSError:[Errno 22]无效参数:'C:\\ProgramData\\Microsoft\\Windows\\Startmenu\\Programs\\Python 3.4\topheavy.txt'

感谢您的帮助。

正如Python文档中所述,IOError异常会发生:

当I/O操作(如打印语句、内置 open()函数或文件对象的方法)对于与I/O相关的 原因,例如,“未找到文件”或“磁盘已满”

用“r”(读)而不是“w”(写)打开

这两行中的开始菜单是不同的??尝试使用正斜杠而不是反斜杠。Python会将正斜杠转换为运行它的操作系统的适当分隔符

打开('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.4\topheavy.txt','w')


OSError:[Errno 22]无效参数:“C:\ProgramData\Microsoft\Windows\Startmenu\Programs\Python 3.4\topheavy.txt”

将文件路径中的每个
\
替换为
\

两件事:

  • 使用包含反斜杠的路径时,您需要使用两个反斜杠,或者使用
    r'
    表单来防止解释转义序列。例如,
    'C:\\ProgramFiles\\…'
    r'C:\ProgramFiles\…'
  • 您的错误显示为:
    \\startmenus\\
    。看起来,在“开始”和“菜单”之间缺少一个空格,尽管事实上,开放行似乎有正确的路径
  • 注意:您路径中的
    \topheavy.txt
    可能也正在转换为
    opheavy.txt
    。这就是为什么在回溯中它前面没有两个反斜杠。

    您使用的是一个“\”分隔符,它可能在某个地方被转义(例如,在接近尾端的地方)。这是Windows路径分隔符,但也用作字符串转义符

    您可以将“\”加倍为“\”。然而,最简单的方法是在开头加上一个r以忽略

    r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.4\topheavy.txt"
    
    跳过使用/的建议,因为您不在Unix上,而且Python也没有理由不能适应Windows,只要您记住将“\”也作为转义。在开始时使用r还允许您将字符串复制/粘贴到另一个程序中,反之亦然

    另外,在c:\temp或类似的环境中进行测试也不会有什么坏处,以避免您可能键入错误路径的问题

    最后,但并非最不重要的一点是,如前所述,您需要在“r”读取模式下打开。

    您应该在路径的最后一个“/”中再添加一个“/”,例如:

    open('C:\Python34\book.csv')打开('C:\Python34\\\book.csv')


    在Python 3.5.4中尝试读取大文件时,我出现了相同的错误。为了解决此问题,我没有使用
    .read()
    将整个文件读入内存,而是逐行读取:

    with open('big.txt') as f:
      for i in f:
        print(i)
    

    我试过了,但还是犯了同样的错误。现在它在“OSError”之前是“r”而不是“w”。谢谢,double\\s适合我。
    with open('big.txt') as f:
      for i in f:
        print(i)