Python基础之文件和目录操作
1 .文件操作
1.1 文件打开和关闭
在python, 使用 open 函数, 可以打开一个已经存在的文件, 或者创建一个新文件.
# 打开文件
f = open('test.txt', 'w')
open 函数调用完毕之后, 返回一个标识该打开文件的对象. 以后对该对象的操作, 就是对该文件的操作.
1.1.1 文件路径
- 如果只写了文件名, 默认会在当前目录下搜索要打开的文件. 如果找不到, 就会报错.
- 也可以编写完成的路径, 例如, /Users/edwardmeng/Desktop/hello.txt.
在 Windows 操作系统中注意路径编写, 如果写的是正斜杠, 用一个隔开路径. 如果写的是反斜杠, 需要两个反斜杠来隔开路径. 例如:
# 反斜杠2个
C:\\Users\\Edward Meng\\Desktop\\hello.txt
# 正斜杠1个
C:/Users/Edward Meng/Desktop/hello.txt
1.1.2 打开模式
open 函数的第二个参数, 指的是文件的打开模式
- 二进制模式和文本模式
- 读模式、写模式、追加模式、读写模式等等
文件打开都有哪些模式?
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写. 文件指针将会放在文件的开头. |
w+ | 打开一个文件用于读写. 如果该文件已存在则将其覆盖. 如果该文件不存在,创建新文件. |
a+ | 打开一个文件用于读写. 如果该文件已存在, 文件指针将会放在文件的结尾. 文件打开时会是追加模式. 如果该文件不存在, 创建新文件用于读写. |
rb+ | 以二进制格式打开一个文件用于读写. 文件指针将会放在文件的开头. |
wb+ | 以二进制格式打开一个文件用于读写. 如果该文件已存在则将其覆盖. 如果该文件不存在, 创建新文件. |
ab+ | 以二进制格式打开一个文件用于追加. 如果该文件已存在, 文件指针将会放在文件的结尾. 如果该文件不存在, 创建新文件用于读写. |
文件数据在磁盘上都是以二进制的方式存储的, 为什么打开文件又分了二进制模式和文本模式?
我们先了解一个知识, 大多数文件中的数据都是一行一行的. 那么如何区分一行是否结束? 在每一行的结束位置, 会有一个不可见的换行符. 这个换行符在不同的操作系统下, 是不一样的, 例如:
- 对于 Windows 操作系统, 换行符为 \r\n
- 对于 Mac 操作系统, 换行符为 \r
- 对于 Linux 操作系统, 换行符则为 \n
而在程序中, 和平台无关, 默认是 \n, 这就设计到一个问题.
例如, 我有文本信息 "我是中国人\n", 当这条信息写入文件中时, '\n' 是否需要转换成当前操作系统的换行符?
对于这个普通文本的信息, 我们希望进行转换, 所以我们就可以选择用文本模式来操作文件, 文本模式会自动将程序中的 \n 转换成对应操作系统的换行符:
- 如果在 Windows 上, 会转换为 \r\n
- 如果在 Mac 上, 会转换为 \r
- 如果在 Linux 上, 不会进行转换
当读取对应操作系统上的文件内容时, 会将 \r\n 或者 \r 转换为 \n.
不是所有的文件都需要进行换行符转换, 针对不需要进行换行符转换的文件, 我们就可以使用二进制模式打开文件. 数据原来是什么样, 写到文件中也是什么样, 不会进行任何转换. 磁盘中的文件是什么样, 读取到程序中保持原有的样子, 不进行任何的转换.
1.1.3 文件关闭
open 函数执行完毕之后, 会返回一个用于标识该文件的文件对象, 该对象有一个 close 方法, 调用该方法可关闭打开的文件, 释放占用的文件资源.
注意: 即使我们不关闭文件, Python 也会在某个时机下自动关闭文件, 释放文件资源. 但这并不意味着我们不需要调用 close 方法手动关闭文件, 通过 close 方法手动调用我们可以在不用时及时关闭文件, 释放文件资源. 文件使用完毕之后, 马上调用 close 方法是一个非常好的编程习惯.
1.2 文件读写
读取文件内容, 可以使用:
- read 方法, 默认读取全部文件数据, 设置参数, 可读取指定个数文字.
- readline 方法, 一次读取一行数据.
- readlines 方法, 一次读取所有数据, 并且返回列表, 列表中每一个元素就是一行数据.
f = open('a.txt', 'r')
# 一次读取10个数据长度
content = f.read(10)
# 一次读取一行
line = f.readline()
# 一次读取所有的行
lines = f.readlines()
print(lines, end='')
f.close()
向文件中写入内容, 可以使用 write 方法.
f = open('a.txt', 'w')
f.write('hello world!')
f.close()
1.3 文件拷贝
# 获得要拷贝的文件名
old_file_name = input('请输入一个文件名:')
# 获取文件的名字和后缀
point_position = old_file_name.rfind('.')
if point_position > 0:
suffix = old_file_name[point_position+1:]
# 拼接新的文件名
new_file_name = old_file_name[:point_position] + '[附件].' + suffix
else:
new_file_name = old_file_name + '[附件]'
# 以读的方式打开旧文件
old_file = open(old_file_name, 'rb')
# 以写的方式打开新文件
new_file = open(new_file_name, 'wb')
new_file.writelines(old_file.readlines())
# 关闭两个文件
old_file.close()
new_file.close()
1.4 总结
- 文件的作用是用来存储数据.
- 文件常见的打开模式有r、w、a、rb、wb、ab等.
- 文本模式会在操作系统文件和程序之间进行换行符转换, 二进制模式则不会进行换行符转换.
- 不同的操作系统换行符是不一样的: 4.1 Windows 的换行符为 \r\n 4.2 Mac 换行符为 \r 4.3 Linux 的换行符为 \n 4.4 程序中的换行符为 \n
- open 函数用于打开一个文件, 并返回一个用于标识来物理文件的对象.
- 文件对象的 close 方法用于关闭文件, 及时释放占用的文件资源.
- 文件对象的 read 方法用于从文件中读取所有数据或者读取指定个数的文字.
- 文件对象的 readline 方法用于从文件中读取一样数据.
- 文件对象的 readlines 方法用于从文件中读取所有内容, 并将将内容存储到列表中, 每一个列表元素为一行数据.
- 文件对象的 write 方法, 用于向文件中写入数据.
2 .目录操作
2.1 文件重命名
os 模块中的 rename() 可以完成对文件的重命名操作.
import os
os.rename('11[附件].html', 'index.html')
2.2 文件删除
import os
os.remove('index.html')
2.3 创建和删除目录
import os
# 创建目录
os.mkdir('abc')
# 删除目录
os.rmdir('abc')
2.4 获取和修改当前工作目录
import os
# 获得当前工作目录
cwd = os.getcwd()
print(cwd)
# 改变当前工作目录
os.chdir('/Users/edwardmeng/Desktop')
# 创建文件
os.mkdir('abc')
2.5 获得指定目录下的文件列表
import os
file_list = os.listdir()
print(file_list)
file_list = os.listdir('/Users/edwardmeng/Desktop')
print(file_list)
2.6 练习: 批量修改文件名
import os
# 1. 批量产生一些文件
def create_files():
"""创建测试文件"""
# 1.1 创建目录
os.mkdir('files')
# 1.2 将工作目录切换到 files 目录中
os.chdir('./files')
# 1.3 在 files 目录中创建 20 个文件名为 文件1、文件2...
i = 0
while i < 20:
file = open('file' + str(i), 'w')
file.write('远看天上一火链, 原是玉皇要抽烟, 如果玉皇不抽烟, 为何又是一火链!')
file.close()
i += 1
# 2. 批量将文件名修改为 [itcast.cn]-file1.txt
def change_file_names():
# 获取文件列表
files_list = os.listdir()
# 遍历文件名
for name in files_list:
os.rename(name, '[itcast]' + name)
create_files()
change_file_names()
2.7 总结
- os.rename 方法可修改一个文件的名字.
- os.remove 方法可删除一个存在的文件.
- os.mkdir 方法可创建一个目录.
- os.rmdir 方法可删除一个目录.
- os.getcwd 方法可获得当前工作目录.
- os.chdir 方法可修改当前的工作目录.
- os.listdir 方法获得指定目录下的文件列表.
Python基础之文件和目录操作的更多相关文章
- Python中的文件和目录操作实现
Python中的文件和目录操作实现 对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这 ...
- Python::OS 模块 -- 文件和目录操作
os模块的简介参看 Python::OS 模块 -- 简介 os模块的进程管理 Python::OS 模块 -- 进程管理 os模块的进程参数 Python::OS 模块 -- 进程参数 os模块中包 ...
- <基础> PHP 文件、目录操作
php文件目录操作 目录操作 is_dir ( $path ) 判断当前路径是否为目录 ,返回布尔 opendir ( $path ) 打开路径目录,返回资源 readdir ( $handle ) ...
- Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)
Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...
- 零基础学Python--------第10章 文件及目录操作
第10章 文件及目录操作 10.1 基本文件操作 在Python中,内置了文件(File)对象.在使用文件对象时,首先需要通过内置的open() 方法创建一个文件对象,然后通过对象提供的方法进行一些基 ...
- 【转】Python之文件与目录操作(os、zipfile、tarfile、shutil)
[转]Python之文件与目录操作(os.zipfile.tarfile.shutil) Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读 ...
- Python之文件与目录操作(os、zipfile、tarfile、shutil)
Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- python文件及目录操作
python文件及目录操作 读/写文件 新建/打开文件 写入 #举个例子,打开D:\test\data.txt #以写入模式打开文件 #如果test(上级目录)不存在则报错 #如果data.txt(文 ...
随机推荐
- C# Note4:XML序列化和反序列化(含加密解密等)
前言 在项目中,我们经常用到各种配置文件,比如xml文件.binary文件等等,这里主要根据实践经验介绍下xml文件的序列化和反序列化(毕竟最常用). 实践背景:我要做一个用户管理功能,用户账号信息存 ...
- java中的a++与++a的区别
++a:如果++在前就会先把a+1. a++:如果++在后就会先a然后在执行++的操作.代码: int a = 1; System.out.pritln(++a); //输出2 int s = 1; ...
- 集合之LinkedHashSet(含JDK1.8源码分析)
一.前言 上篇已经分析了Set接口下HashSet,我们发现其操作都是基于hashMap的,接下来看LinkedHashSet,其底层实现都是基于linkedHashMap的. 二.linkedHas ...
- Java第一次实训
package com.wsy.work; public class JudgeNumber { public static void main(String[] args) { int a = 5; ...
- git 提交的步骤
1. git init //初始化仓库 2. git add .(文件name) //添加文件到本地仓库 3. git commit -m "first commit" / ...
- 洛谷 p1219 八皇后
刚参加完蓝桥杯 弱鸡错了好几道..回头一看确实不难 写起来还是挺慢的 于是开始了刷题的道路 蓝桥杯又名搜索杯 暴力杯...于是先从dfs刷起 八皇后是很经典的dfs问题 洛谷的这道题是这样的 上面的布 ...
- Atcoder Beginner Contest 118 D-Match Matching(完全背包)
题目链接 题意就是给N根火柴,M个数(M只能是1到9,对应的数字也只能是1到9),只能用这M个出现过的数(但每个数可以随便用多少个,只要火柴够)来拼出一个数字(拼出1,2,3,4,5,6,7,8,9分 ...
- hdu-1814(2-sat)
题意:给你n个组,m条规则,每组有俩个人,这两个人不能同时出现,然后m条规则代表着有两个人,这两个人也不能同时出现,问你是否存在每组都能出现一人的选择方案 解题思路:因为这个需要字典序输出,所以只能用 ...
- JarvisOJ BASIC 德军的密码
已知将一个flag以一种加密形式为使用密钥进行加密,使用密钥WELCOMETOCFF加密后密文为 000000000000000000000000000000000000000000000000000 ...
- HTML中的元素定位
static默认 relative相对定位 absolute绝对定位 mix relative and absolute混合相对定位和绝对定位 fixed固定定位 float浮动 reference ...