python怎么判断文件是否存在

这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块、Try语句、pathlib模块。

python 创建文件夹 如果存在_python3创建文件夹python 创建文件夹 如果存在_python3创建文件夹


python 创建文件夹 如果存在_python3创建文件夹


回到顶部

1.使用os模块

os模块中的os.path.exists()方法用于检验文件是否存在。

判断文件是否存在

import os

os.path.exists(test_file.txt)#Trueos.path.exists(no_exist_file.txt)#False

判断文件夹是否存在

import os

os.path.exists(test_dir)#Trueos.path.exists(no_exist_dir)#False

可以看出用os.path.exists()方法,判断文件和文件夹是一样。

其实这种方法还是有个问题,设你想检查文件“test_data”是否存在,但是当前路径下有个叫“test_data”的文件夹,这样就可能出现误判。为了避免这样的情况,可以这样:

import os

os.path.isfile("test-data")

通过这个方法,如果文件”test-path.exist()data”不存在将返回False,反之返回True。

即是文件存在,你可能还需要判断文件是否可进行读写作。

回到顶部

判断文件是否可做读写作

使用os.access()方法判断文件是否可进行读写作。

语法:

os.access(path, mode)

path为文件路径,mode为作f.seek(): 指针的移动是以字节为单位的模式,有这么几种:

os.F_OK: 检查文件是否存在;

os.R_OK: 检查文件是否可读;

os.W_OK: 检查文件是否可以写入;

os.X_OK: 检查文件是否可以执行

该方法通过判断文件路径是否存在和各种访问模式的权限返回True或者False。

import osif os.access("/file/path/foo.txt", os.F_OK): print "Given file path is exist."if os.access("/file/path/foo.txt", os.R_OK): print "File is accessible to read"if os.access("/file/path/foo.txt", os.W_OK): print "File is accessible to write"if os.access("/file/path/foo.txt", os.X_OK): print "File is accessible to execute"

回到顶部

2.使用Try语句

可以在程序中直接使用open()方法来检查文件是否存在和可读写。

语法:

open()

如果你open的文件不存在,程序会抛出错误,使用try语句来捕获这个错误。

程序无法访问文件,可能有很多原因:

如果你open的文件不存在,将抛出一个FileNotFoundError的异常;

文件存在,但是没有权限访问,会抛出一个PerissionError的异常。

所以可以使用下面的代码来判断文件是否存在:

try:

f.close()except FileNotFoundError: print "File is not found."except PerissionError: print "You don't he permission to access this file."

其实没有必要去这么细致的处理每个异常,上面的这两个异常都是IOError的子类。所以可以将程序简化一下:

try:

f.close()except IOError: print "File is not accessible."

使用try语句进行判断,处理所有异常非常简单和优雅的。而且相比其他不需要引入其他外部模块。

回到顶部

3. 使用pathlib模块

pathlib模块在Python3版本中是内建模块,但是在Python2中是需要单独安装三方模块。

使用pathlib需要先使用文件路径来创建path对象。此路径可以是文件名或目录路径。

检查路径是否存在

path = pathlib.Path("path/file")

检查路径是否是文件

path = pathlib.Path("path/file")

path.is_file()

51.在文件的打开模式中,(什么是覆 盖写模式。

with open('a.txt',mode='wt',encoding='utf-8') as f:

【w】:只写;文件存在则覆盖写,不存在则创建。文件指针在开头。【w+】:可读可写;文件存在则覆盖写,不存在则创建。文件指针在开头。

这是Python中,正文文件的“覆盖写”打开模式

关于【r】【r】;只读;文件必须已存在,文件指针在开头。【r+】;可读可写;文件必须已存在,文件指针在开头。【rb】;只读(二进制);和【r】相同,只是以二进制形式打开,一般打开、视频之类文件【rb+】;可读可写(二进制);和【r+】相同,只是以二进制形式打开,一般打开、视频之类文件关于【w】【w】:只写;文件存在则覆盖写,不存在则创建。文件指针在开头。【w+】:可读可写;文件存在则覆盖写,不存在则创建。文件指针在开头。【wb】只写(二进制);和【w】相同,只是以二进制形式打开,一般打开、视频之类文件【wb+】:可读可写(二进制):和【w+】相同,只是以二进制形式打开,一般打开、视频之类文件。

python对文件的独作有哪几种?请详细说明每种方法

1.打开文件:

f=open(r'E:PythonProjectstest7a.txt',mode='rt',encoding='utf-8')

以上三个单引号内分别表示:要打开的文件的路径,mode为文件打开方式具体介绍在下文,encoding为文件的字符编码,一般默认为utf-8

2.读写文件:

data=f.read() # 读文件

f.write() # 写文件

3.关闭文件:

f.close()

4.为了简便,一般采用上下文的方法进行文件作,可不用关闭文件

with open('a.txt',mode='rt',encoding='utf-8') as f:

daw:只写:以该模式打开文件时,若文件不存在则创建一个文件,如文件存在,则清空文件内容,文件指针移到开头ta=f.read()

print(data)

f.write('hello world')

5.控制文件读写的作:

a:追加写:以该模式打开文件时,若文件不存在则创建一个文件,如文件存在,则将文件指针移到文件末尾,在文件末尾写入新的内容

6.控制文件读写内容的模式:(t 和 b都不能单独使用,必须与r,w,a结合使用)

t:(默认):无论读写都是以字符为单位,只能识别文本文件,必须要制定encoding

b:无论读写都是以字节为单位,可以识别所有文件,一定不能指定encoding

7.文件的拷贝

with open ('a.txt',mode='rb') as af,

open('b.txt',mode='wb') as bf:

data=af.read

f.write(data)

执行程序后,打开文件,即可发现文件已成功拷贝,这里使用 b 而不是用 t 模式,是因为文件有多种格式

8.文件的修改:

文件的修改是在硬盘上实现文件的覆盖,相当于一个新的文件以旧的文件名来命名的; 文件的修改有俩种方式,分别适用于不同的情景

方式一(适用于容量小的文件):这种方式的原理是:创建一个新的文件,将旧文件的内容拷贝到新的文件中;这样内存里就存在俩个文件,故不适用于容量大的文件,具体代码见下方 View

with open('a.txt',mode='rt',encoding='utf-8') as f:

data=f.read()

data_new=data.replace('yang', 'yv')

with open('b.txt',mode='wt',encoding='utf-8')as p:

p.write(data_new)

方式二(适用于容量大的文件):此方式的原理为:读取旧文件的一行内容,修改后写到临时文件中,循环往复直到写完,然后将源文件删除,将临时文件命名为源文件名.这种方式在内存中只存在2行文件,节省内存,可用于大文件

import os

with open('b.txt',mode='rt',encoding='utf-8') as f,

open('.b.txt.swap',mode='wt',encoding='utf-8') as p:

for line in f:

p.write(line.replace('yv','yang'))

# 调用replace方法,将源文件中的'yv',换成'yang'

os.remove('b.txt')

os.rename('.b.txt.swap','b.txt')

9. 文件的阶段:truncate(n)

将文件中n个字节后内容全删了,当 n 不存在时,即删除文件全部内容

10.文件内指针的移动

seek 有三种模式:

0:(默认模式) 指针在文件开头,只有在 0 模式可以在 t 模式下用,也可以在 b 模式下用,而 1 ,2 模式只能在 b 模式下使用

1:指针在当前位置

2:指针在文件末尾

以下为具体事例:

# 0

with open('a.txt',mode='rt',encoding='utf-8')as f:

f.seek(3,0)

print(f.l()) # 指针当前位置

print(f.read()) # 从指针后读出所有内容

# 1 参照if len(line)==0:指针当前位置

with open('a.txt',mode='rb')as f:

f.read(2)

f.seek(4,1)

print(f.l())

print(f.read().decode('utf-8'))

# 2 参照文件末尾

with open('a.txt',mode='rb')as f:

f.seek(-5,2)

print(f.l())

print(f.read().decode('utf-8'))

当 seek处于 2 模式时,可以将文件中新加入的内容打印出来,具体代码如下:

# 另一个文件进行写作,写的代码如下:

with open('a.txt',mode='at',encoding='utf-8')as f:

f.write('hello worldn')

# 每在文件中写入新的内容,都打印出来,以下代码执行打印作:

import time

with open('a.txt',mode='rb')as f:

f.seek(0,2)

while True:

line=f.readline() # readline 可以读取没有内容的部分

# print(line.decode('utf-8'))

time.sleep(0.1)

else:

print(line.decode('utf-8'))

求解python:[Errno 2] No such file or directory: '/flash/data/data.pkl'?谢谢

对于文件的读写,是由要求的。由于你的文件的打开方式是'w',也就是文件不存在时就创建文件,所以那个pkl文件(我指的是相对路径中的pkl)不存在会自动创建,这不是问题,问题就在于那个相对路径,就是那个path是否存在,如果'/flash/data'这个文件夹不存在一样会出问题。所以先要判断这个path是否存在。不存在要创建。

import os

if not os.path.e只检查文件xisf =open()ts(path):

os.mkdir(path)不过要注意,对于路径一次只能创建一层,例如如果flash这个文件夹不存在,那么os.mkdir('path/data')就会出错。不明白可追问。

idle如何创建文件

通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以在做任何作之前,先判断文件是否存在。

idle创建文件的方法如下:

1、打开IDLE后,点击左上角File,然后点击项NewFile,即可创建python文件。或者直接使用快捷键Ctrl+N快速创建文件;

2、在创建的文件中写Pr:(默认模式):只读:以该模式打开文件时,若文件不存在则报错,若文件存在,则文件指针在文件开头,即从文件开头开始读文件ython文件中写一些代码;

3、保存文件直接使用快捷键Ctrl+S即可快速保存,然后运行保存好的Python文件,直接在IDLE中运行Python程序,点击窗口上方Run,然后点击RunModule即可运行程序。亦可通过快捷键F5快速运行。

IDLE是一个纯Python下自带的简洁的集成开发环境(IDE)。