python路径正确但打不开文件_打开文件路径在python中不起作用

新的ish^{} module(在Python>=3.4中提供)非常适合处理类似路径的对象(包括Windows和其他os)。

简化:您可以将任何路径(目录和文件路径对象被视为完全相同的)构建为一个对象,它可以是一个绝对路径对象或一个相对路径对象。您可以使用原始字符串生成复杂的路径(即r'string'),并且pathlib将是非常宽容的。但是,请注意,与原始字符串相比,有更好的方法来构建路径(请参阅下一步)。

下面是一些例子:from pathlib import Path

Path(r'c:\temp\foo.bar') # absolute path

Path(r'c:/temp/foo.bar') # same absolute path

Path('foo.bar') # different path, RELATIVE to current directory

Path('foo.bar').resolve() # resolve converts to absolute path

Path('foo.bar').exists() # check to see if path exists

请注意,如果您使用的是Windows pathlib,请原谅您在第二个示例中使用了“错误的斜杠”。请参阅最后的讨论,了解为什么您可能应该始终使用正斜杠。

简单地显示一些有用的路径(如当前工作目录和用户主页)的工作方式如下:# Current directory (relative):

cwd = Path() # or Path('.')

print(cwd)

# Current directory (absolute):

cwd = Path.cwd()

print(cwd)

# User home directory:

home = Path.home()

print(home)

# Something inside the current directory

file_path = Path('some_file.txt') # relative path; or

file_path = Path()/'some_file.txt' # also relative path

file_path = Path().resolve()/Path('some_file.txt') # absolute path

print(file_path)

要在文件树中导航,可以执行以下操作。注意,第一个对象home是一个Path,其余的只是字符串:some_person = home/'Documents'/'Project Documentation'/'personica.txt' # or

some_person = home.join('Documents','Project Documentation','personica.txt')

要读取位于路径上的文件,可以使用其open方法而不是open函数:with some_person.open() as f:

dostuff(f)

但你也可以直接抓取文本!contents = some_person.read_text()

content_lines = contents.split('\n')

…直接写文本!data = '\n'.join(content_lines)

some_person.write_text(data) # overwrites existing file

以这种方式检查它是一个文件还是一个目录(并且存在):some_person.is_dir()

some_person.is_file()

创建一个新的空文件,而不这样打开它(以静默方式替换任何现有文件):some_person.touch()

要使文件仅在不存在时才存在,请使用exist_ok=False:try:

some_person.touch(exist_ok=False)

except FileExistsError:

# file exists

创建一个新目录(在当前目录下,Path()),如下所示:Path().mkdir('new/dir') # get errors if Path()/`new` doesn't exist

Path().mkdir('new/dir', parents=True) # will make Path()/`new` if it doesn't exist

Path().mkdir('new/dir', exist_ok=True) # errors ignored if `dir` already exists

以这种方式获取路径的文件扩展名或文件名:some_person.suffix # empty string if no extension

some_person.stem # note: works on directories too

对路径的最后一部分使用name(如果存在,则使用茎和延伸部分):some_person.name # note: works on directories too

使用with_name方法重命名文件(该方法返回相同的路径对象,但具有新的文件名):new_person = some_person.with_name('personica_new.txt')

您可以使用iterdir遍历目录中的所有“stuff”:all_the_things = list(Path().iterdir()) # returns a list of Path objects

侧边栏:反斜杠(\)

在路径字符串中使用反斜杠时要小心,特别是以反斜杠结尾的路径。与any字符串一样,即使在原始输入模式下,Python也会将终止反斜杠作为转义字符读取。注意:>>> r'\'

File "", line 1

r'\'

^

SyntaxError: EOL while scanning string literal

因此,如果您不知道这个问题,这将给出一个相当隐晦的错误消息:>>> Path(r'C:\')

File "", line 1

Path(r'\')

^

SyntaxError: EOL while scanning string literal

这个错误的原因是\'被假定为字符串中的单引号。这很好:'\''(第二个单引号结束字符串)。

如果坚持使用反斜杠,请确保使用原始输入模式,否则会遇到问题。例如,'\t'字符表示一个制表符。所以当你这样做时(没有原始输入):>>> Path('C:\temp')

您正在将制表符放入您的路径中。这是完全合法的,Python不会抱怨,除非您做了一些事情,使Windows尝试将其转换为一个真正的Windows路径:>>> Path('C:\temp').resolve()

Traceback (most recent call last):

File "", line 1, in

OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'C:\temp'

如果你不知道发生了什么,这也是一个非常神秘的错误!在处理路径时最好避免使用反斜杠字符。

防止你的问题

创建文件并错误地添加了双扩展名时出现问题。要使用pathlib防止此问题,请使用touch方法生成文件:some_person = Path.home()/'Documents'/'Project Documentation'/'personica.txt'

some_person.touch()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值