这段用于打开文件的代码有什么问题?

4
我尝试使用以下Python代码打开文件:

code to open file:

f = open("/Desktop/temp/myfile.txt","file1")

它没有起作用。我认为这是因为我没有指定正确的路径。我该如何解决这个问题?


适用于我,检查你的路径。 - ennuikiller
2
@ennuikiller - 真的吗?它是在哪种模式下打开的? - Dominic Rodger
刚刚遇到这个问题时,它的标题完全不合适——实际上,这个问题与文件路径毫无关系,尽管最初存在误解。这意味着它可能会误导(或未能帮助)成千上万的观众。由于该问题没有包含适当的调试信息,因此应该在提问时关闭。错误消息将直接解释问题,并且阅读它会清楚地表明路径不是问题所在。 - Karl Knechtel
嗯,路径可能是一个问题,但不是所报告的问题。Stack Overflow的问题应该只涉及一个问题,并展示一个适当的[MRE],以便能够清晰地回答而不纠缠其他问题。我可能会为路径问题编写一个新的QA对,因为我们迫切需要一个好的解决方案。 - Karl Knechtel
算了吧,我们可以去 https://dev59.com/-Wct5IYBdhLWcg3wSbjY。 - Karl Knechtel
8个回答

11

你的代码语法有误,open函数的使用方法不正确。

在解释器提示符下尝试以下命令:

>>> help(open)
Help on built-in function open in module __builtin__:

open(...)
    open(name[, mode[, buffering]]) -> file object

    Open a file using the file() type, returns a file object.

因此,第二个参数是打开文件的模式。通过快速查看文档,我们尝试使用以下内容:

f = open("/Desktop/temp/myfile.txt","r")

展示良好的习惯,除了正确的答案外,还要加1分 :-) - RedGlyph

10

编辑:哦,是的,你的第二个参数是错误的。我甚至没有注意到 :)

Python会在你指定的位置查找文件。如果你在/home/malcmcmul打开解释器,那么那里就是活动目录。

如果你指定一个路径,那么它就会在那个路径下查找文件。你确定/Desktop/temp是一个有效的路径吗?我不知道有多少设置中将/Desktop作为根文件夹。

以下是一些例子:

  • 如果我有一个文件:/home/bartek/file1.txt

  • 我输入python进入目录/home/bartek/

  • 这将正常工作并获取file1.txt:f = open("file1.txt", "r")

  • 这将不起作用:f = open("some_other_file.txt", "r") 因为该文件在某个其他目录中。

  • 只要我指定正确的路径,这就可以工作:f = open("/home/media/a_real_file.txt", "r")


谢谢!我不太确定它会首先查找哪个目录,而且我也不想指定每个目录!再次感谢! - Federer

4
首先,第二个参数是权限位:"r"表示读取,"w"表示写入,"a"表示追加。"file1"不应该在这里出现。

3

尝试:

f = open('Desktop/temp/myfile.txt', 'r')

这将相对于当前目录打开文件。如果您想使用绝对路径打开文件,可以使用'/Desktop/temp/myfile.txt'。open函数的第二个参数是模式(不知道你的示例中file1应该是什么意思)。
关于问题 - Python遵循操作系统方案 - 首先查找当前目录,如果查找模块,则在之后查找sys.path。如果您想从某个子目录打开文件,请使用os.path.join,例如:
import os
f = open(os.path.join('Desktop', 'temp', 'myfile.txt'), 'r')

如果您使用'/'和'\'时遇到问题,那么您可以放心了。

有关如何使用内置的open函数的更多信息,请参阅文档


2

只需输入文件名,就可以找到您的数据......它是如何工作的?---->如果路径存在,则检查它是否为文件,然后打开并读取。

最初的回答:

输入文件名即可获取数据。它的功能是:检查路径是否存在,判断其是否为文件,然后打开并读取。

import os
fn=input("enter a filename: ")
if os.path.exists(fn):
    if os.path.isfile(fn):
        with open(fn,"r") as x:
            data=x.read()
            print(data)
    else:
        print(fn,"is not a file: ")
else:
    print(fn,"file doesnt exist ")

1

这个:

import os
os.path

应该告诉你Python首先查找的位置。当然,如果您指定绝对路径(正如您已经做的那样),那么这就无关紧要了。

此外,正如其他人所说,您在open中的第二个参数是错误的。要找到正确的方法,请尝试使用以下代码:

help(open)

1
原帖没有涉及到的一个小潜在问题是,确保文件名参数使用 '/' 而不是 '\'. 这个问题让我困扰了一下,因为文件检查器在其位置中使用了不正确的 '/'.

'C:\Users\20\Documents\Projects\Python\test.csv' = 不起作用

'C:/Users/20/Documents/Projects/Python/test.csv' = 完全正常工作


0
from pathlib import Path
import os

desired_directory = Path('C:/')
desired_directory = desired_directory / 'subfolder'
os.chdir(desired_directory)

这将迫使Python查看您指定的路径中的目录。当使用 `subprocess.Popen' 来使用二进制文件时,它非常有效,例如在此片段中:

from subprocess import Popen
from shutil import which
instance_of_Popen = Popen(which('name_of_executable'))
print(instance_of_Popen.args)

显然,上面的代码片段假设您正在使用Windows(使用驱动器字母)。对于POSIX,您将传递\usr\home或类似的内容作为您的“Path”基础。 - brethvoice
查看这个回答以获取更多细节,并在评论中查找可能有用的链接,如果您正在使用 `subprocess.Popen'。 - brethvoice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接