python创建文件os_python的文件操作与目录操作os模块

1.file文件

File对象做大部分的文件操作。操作的对象是文件,不仅仅是txt文件。以下以txt文件为例。

2.文件的打开与关闭

打开文件函数:open(它是一个内置函数,可以直接调用)

语法:file object = open(filename[,access_mode,encoding]) --创建file对象

参数含义:filename---包含了你要访问的文件名称的字符串值。

access_mode----决定了文件的打开方式:只读、写入、追加等。这个参数是非强制的,默认是只读(r)。

encoding--指定文件的打开方式,默认是平台的编码方式(windows下是gbk格式)

文件操作模式:

模式

描述

r

只读方式打开。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w

打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

w+

打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

注:ctrl+b:查看内置函数的源码

创建文件的时候不要再pycharm内部创建,因为文件格式是gbk格式。文件格式要求是utf-8.

3.文件的读写追加操作

1)read()方法:一下子读取所有的数据。

read(count)方法从一个打开的文件中读取一个字符串

里面传递你要读取的字节数

如果不传递,默认读取所有的数据

读完了之后,指针会定位到读完之后的位置

语法:file.read()-------当输入默认值后,再读文件内容则什么都不输出

实例:

#文件的打开--# 在python当中“\”表示转义字符,如果要写文件路径的话,就在路径前面加字符r,或者写为“\\”

file= open(r"E:\python\python_API\file\1.txt",encoding="utf-8")

print(file.read()) ------文件中原有格式什么样子,输出就是什么样子

结果:

a=1b=2c=3d=4aaaaaaaaaaaaaaaa

bbbbbbbbbbbbb

ccccccc

在读取之后的基础上,再次输出内容。如下结果,可以看到,再次输出内容时,未打印任何信息。是因为在输出文件所有数据后,指针指向文件末尾,因此再次输出时文件后并未任何内容,即为空。

实例:

file = open(r"E:\python\python_API\file\1.txt",encoding="utf-8")print(file.read())print("===========")print(file.read())

结果:

a=1b=2c=3d=4aaaaaaaaaaaaaaaa

bbbbbbbbbbbbb

ccccccc===========

2)readline()方法:

读取单独的一行:会从文件中读取单独的一行。换行符为 '\n'。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。

语法:file.readline()

实例:

file = open(r"E:\python\python_API\file\1.txt",encoding="utf-8")

line= file.readline() --返回第一行数据print(line)

line2= file.readline() --返回第二行数据print(line2)

结果:

a=1b=2

3)readlines()方法:按行读取

按行读取:返回该文件中包含的所有行。并以list列表的形式输出

语法:str = file.readlines()

相当于迭代一个文件然后按行读取:

for line in f:

print(line, end='''')

实例:

file = open(r"E:\python\python_API\file\1.txt",encoding="utf-8")

lines=file.readlines() ---返回的是列表list类型print(lines)

结果:

['a=1\n', 'b=2\n', 'c=3\n', 'd=4\n', '\n', 'aaaaaaaaaaaaaaaa\n', '\n', 'bbbbbbbbbbbbb\n', 'ccccccc\n']

4)write()方法:只有一个人在修改,占用资源。修改过程中其他人不能修改。

可将任何字符串写入一个打开的文件。

注:write()方法不会在字符串的结尾添加换行符(‘\n’),所以无法实现自动换行。

语法:f.write()

实例:

file = open(r"E:\python\python_API\file\1.txt","w",encoding="utf-8")

file.write("写入数据\n")

file.write("再次写入数据")

file.close()

结果: ----打开文件查看数据,原数据被替换。文件中数据为:

写入数据

再次写入数据 ----因为是打开后的两次操作。如果关闭文件重新打开再次写入之前的数据就没有了

5)writelines():

里面传入你要写的列表内容,就可以写入多行。

注:write()方法不会在字符串的结尾添加换行符(‘\n’),所以无法实现自动换行。

语法:file.writelines([“”,””,””,.....])

file = open(r"E:\python\python_API\file\1.txt","w",encoding="utf-8")

file.writelines(["写入数据\n","再次写入数据","第三行数据内容"])

file.close()

结果:

写入数据

再次写入数据第三行数据内容

6)追加,在上述实例的模式中追加一句"hahahhahahhaha"。

实例:

file = open(r"E:\python\python_API\file\1.txt","a+",encoding="utf-8")

file.write("hahahhahahhaha")

file.close()

结果:

写入数据

再次写入数据第三行数据内容hahahhahahhaha

4.文件的定位

1)tell()

输出文件内的当前位置(指针的位置);换句话说,文字会写在上次文字结尾后面

2)seek(offset[,from])

改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

from参数----0:参考位置为文件开头

1:参考位置设置为当前所在位置

2:参考位置设为文件结尾

实例:

file = open(r"E:\python\python_API\file\1.txt","a+",encoding="utf-8")

file.write("hahahhahahhaha")

num=file.tell()print(num)print(file.read())

file.seek(0,0)---移动文件位置为文件开头print(file.read())

file.close()

结果:81

--此时指针在文件末尾,输出为空

写入数据

再次写入数据第三行数据内容hahahhahahhahahahahhahahhaha

5.文件对象的属性

一个文件被打开后,有一个file对象,可以得到有关该文件的各种信息。

以下是和file对象相关的常用属性列表

属性

描述

file.closed

返回true,如果文件已经关闭,否则返回false

file.mode

返回被打开文件的访问模式

file.name

返回文件的名称

file.softspace

如果用print输出后,必须跟一个空格符,则返回false。否则返回true。(python3已去除)

实例:

file = open(r"E:\python\python_API\file\1.txt","r",encoding="utf-8")print("文件的访问模式",file.mode)print("文件名称",file.name)print("是否已经关闭",file.closed)

file.close()

结果:

文件的访问模式 r

文件名称 E:\柠檬班\python\python_API\file\1.txt

是否已经关闭 False

6.文件操作中应该写try...except..finally

方式一:try:

file=open(“some_file”,”w”)

file.write(“Hello”)finally:

file.close()

方式二:自动关闭

with open(“some_file”,”w”) as opened_file:

opened_file.write(“Hello”)

7.os模块中常用的方法

1)os模块概述

os 模块提供了非常丰富的方法用来处理文件和目录。

2)python引入os模块:import os

3)常用的方法

(1)os.name:输出字符串指示正在使用的平台。Windows用“nt”表示,linux/Unix用“posix”表示

importosprint(os.name)

结果:nt

(2)os.getcwd():得到当前的工作目录,即当前python脚本工作的目录路径

importosprint(os.getcwd())

结果:E:\python\python_API

(3)os.listdir(path):返回指定目录下的所有文件和目录名。若为空,代表python当前目录下。返回的是列表类型

importos#获取当前目录下的所有文件夹和文件

print(os.listdir())#指定某个目录,获取指定目录下的文件夹和文件

print(os.listdir(r"E:\ubuntu"))

结果:

['.idea', '1.py', 're_lianxi.py', 'test_ddt_lianxi.py', '__pycache__']

['Ubuntu 64 位.nvram', 'vmware-2.log', 'vmware.log']

(4)os.mkdir(path):创建一个目录,且之前的目录必须是已存在的。若该创建的目录已存在,则再次创建会报错。

importos#直接写,则在python当前目录下创建一个test文件夹(相对路径)

print(os.mkdir("test"))#写绝对路径,则在指定的目录下创建(目录aaa是存在的)

print(os.mkdir(r"F:\aaa\test"))#写绝对路径,则在指定的目录下创建(目录bbb不存在)

print(os.mkdir(r"F:\bbb\test"))

结果:

None --创建成功,该函数无返回值,则返回值为None,是正常的

None

Traceback (most recent call last):

File"E:/python/python_API/2.py", line 14, in

print(os.mkdir(r"F:\bbb\test"))

FileNotFoundError: [WinError3] 系统找不到指定的路径。: 'F:\\bbb\\test'

(5)os.remove():删除一个文件,不能删除文件夹

os.remove(r"E:\python\1.txt")

(6)os.rmdir():删除一个目录,只能删除空目录.如果删除的目录不存在,则会报错。

若要删除目录包含所有文件,需要引入shutil模块,shutil.rmtree()

import os

os.rmdir(r"E:\python\test2")--------删除空目录

import shutil

shutil.rmtree("E:\python\test4")------删除目录

(7)os.makedirs(path):创建一系列目录,目录路径之前文件夹不存在也可,会立即创建

os.makedirs(r"E:\python\test6\test1")

(8)os.environ.get(“path”):获取环境变量值

print(os.environ.get("path"))

(9)os.system(command):运行系统命令,返回的是0或者1。不会返回控制台输出结果。

注:想获取控制台输出内容,导入subprocess模块

print(os.system("cd /"))

结果:0

(10)os.chdir():改变当前工作路径到指定路径

importosprint("修改前的路径:",os.getcwd())

path= "E:\柠檬班"

#修改当前目录路径

os.chdir(path)print("修改后的路径:",os.getcwd())

(11) os.path模块:主要处理文件路径相关的

1*。os.path.join(path,name):连接目录与文件名或目录

#连接目录和文件名

print(os.path.join(r"E:\python\test6",r"test\1.txt"))

输出:E:\柠檬班\python\test6\test\1.txt

#连接目录和目录print(os.path.join(r"E:\python\test5",r"test\aaa"))输出:E:\柠檬班\python\test5\test\aaa

2*。os.path.isifle()和os.path.isdir():分别检验给出的路径是一个文件还是目录

#检验路径是目录,则返回true

print(os.path.isdir(r"E:\python"))

结果:True#检验路径是文件,则返回true

print(os.path.isfile(r"E:\python\1.txt"))

结果:True

3*。os.path.exists():检验给出的路径是否真实存在

print(os.path.exists("E:\python\test4"))

结果:False

4*。os.path.split(路径):返回一个路径的路径名或者文件名

场景:在A电脑上文件:D:\python\1\file.txt,并在同级py目录下有个python来操作此文件。将其拷贝到电脑B上(脚本一并拷贝),电脑B的路径为F:\python3\aaa\file.txt

#将路径分为两部分

print(os.path.split(r"E:\python\test6"))

结果:('E:\\柠檬班\\python', 'test6')#获取文件或者目录的路径

print(os.path.split(r"E:\python\test6")[0])

结果:E:\柠檬班\python#从目录中提取文件名或者路径名

print(os.path.split(r"E:\python\test6")[-1])

结果:test6

5*。os.path.splitext(路径):分离文件名与扩展名

print(os.path.splitext(r"E:\python\1.txt"))

结果:('E:\\柠檬班\\python\\1', '.txt')

6*。os.path.dirname(path):返回文件路径

print(os.path.dirname(r"E:\python\1.txt"))

结果:E:\柠檬班\python

7*。os.path.basename(path):返回文件名

print(os.path.basename(r"E:\python\1.txt"))

结果:1.txt

8*。os.path.getsize(name):获得文件大小,如果name是目录返回0L

#获取文件的大小

print(os.path.getsize(r"E:\python\1.txt"))

结果:78(单位:字节)#给定一个目录的路径,获取大小

print(os.path.getsize(r"E:\python\python_API\file"))

结果:0

9*。os.path.abspath():返回path规范后的绝对路径

print(os.path.abspath(__file__)) -----其中,(__file__)表示当前文件

结果:E:\requests_API_1\Common\dir_config.py

练习题:补充缺失的代码:用代码实现以下中文内容

def print_directory_contents(sPath):

'''

这个函数接收文件夹的路径作为入参函数,

返回该文件夹中文件的路径,

以及其包含文件夹中文件的路径。

'''

importos

list_1=[]defprint_dictory_contents(sPath):ifos.path.isdir(sPath):for item inos.listdir(sPath):

filepath=os.path.join(sPath,item)ifos.path.isdir(filepath):

print_dictory_contents(filepath) #----迭代函数elifos.path.isfile(filepath):

list_1.append(filepath)returnlist_1,len(list_1)

list_dir,lentgh= print_dictory_contents(r"E:\ubuntu")print(list_dir,lentgh)

练习题2:判断一个路径是否存在,如果不存在,则创建目录。 创建完成之后,在该目录下面创建一个txt文件,将个人信息写入进去。

importos#函数的定义

defwrite_personInfo(dir_path,person_info):if os.path.exists(dir_path) ==False:

os.makedirs(dir_path)ifos.path.isdir(dir_path):

os.chdir(dir_path)

with open("xiaojian_personInfo.txt","w") as fs:

fs.write(person_info)

#函数的调用

person_info= '''age:29

height:155

weight:94

city:changsha

career:software testing engineer

Hobbies:drinking coffee,listening music,watching TV,shopping online,playing badmiton

character:lively,optimistic

signature:Lucky if got ,destined if lost

'''

path = "D:\\Pycharm-workspace\\python2期\\作业参考答案\\我的个人信息"

write_personInfo(path,person_info)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值