在 Linux 系统中万物皆文件,所以我们不可避免的要和文件打交道,我们会常常对文件进行读和写的操作。例如 读写 追加 覆盖 下面用python实现
文件的读写
文件模式 r w a b 读 写 追加 以二进制模式打开
打开文件 xx=open("路径",mode="r/w/a/b")
文件操作xx.read(5)#读取文件前5个字符
关闭资源 xx.close()
基本语法
file_object = open(file_name,mode='r')
file_name:**表示我们要打开文件的路径
mode:**以怎样的方式打开文件
read方法-----读取文件
open 函数的第一个参数是要打开的文件名(文件名区分大小写)
如果文件 存在,返回 文件操作对象
如果文件 不存在,会 抛出异常
read 方法可以一次性 读入 并 返回 文件的 所有内容
close 方法负责 关闭文件
如果 忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问
注意:read 方法执行后,会把 文件指针 移动到 文件的末尾
fr = open("/etc/resolv.conf",mode='r')# 1.打开文件
# 2.读取文件
print(fr.read(5))# 读取前5个字符
print(fr.read(3))# 接着向后读3个字符
print(fr.read()) # 读取文件剩余的所有内容
print(fr.read()) # 什么都读取不到,因为指针已经在末尾了
fr.close()# 3.关闭资源
文件指针
所移动的内容 就是读取的内容
第一次打开文件 指针会指向文件开始位置
重新打开文件时,文件指针 重新指向文件的最 开始位置
readline 方法 —— 按行读取
readline 方法可以一次读取一行内容
方法执行后,会把 文件指针 移动到下一行,准备再次读取
f=open("/etc/passwd",mode='r')
print(f.readline(),end="")#
print(f.readline())
print(f.readline())
f.close()
readlines方法
readlines() 方法读取所有(剩余的)行然后把它们作为一个 字符串列表 返回
# 1.打开文件
fr2 = open("/etc/hosts", mode="r")
# 2.读取文件
# 和for连用
# data = fr2.readlines()
# print("data:", data)
# print(data[0]) # 第一行
# print(data[1]) # 第二行
for item in fr2: # 相当于:for item in fr2.readlines():
print(item, end="")
# 3.关闭资源
fr2.close()
f=open("/etc/hosts",mode="r")
for i in f:
print(i,end="")
f.close()
案例读取大文件
while 1:
data=f.readline()
#if data == "":#判断是否读取完成
if len(data) == 0:#通用也能用于后面的二进制文件的读取
break
print(data,end="")
f.close()
文件写操作
write 方法 —— 写文件
write() 内建方法功能与 read() 和 readline() 相反
它把含有 文本数据 或 二进制数据 的内容写入到文件中去
对open进行覆盖
writelines方法
和 readlines() 一样,writelines() 方法是针对 列表 的操作
它接受一个 字符串列表 作为参数,将他们写入文件
行结束符并不会被自动加入,所以如果需要的话,必须再调用 writelines() 前给每行结尾加上行结束符
# write 方法
# 1.打开文件
fw = open("/opt/dc.txt", mode="w") # w: write
# 2.写文件
fw.write("hello world\n")
fw.write("you are my baby girl~\n")
# 3.关闭资源
fw.close()
# writelines 方法
list01 = ["hello\n", "world\n", "nfx\n"]
# 1.打开文件
fw1 = open("/opt/tc.txt", mode="w")
# 2.写文件
fw1.writelines(list01)
# 3.关闭资源
fw1.close()
# hello
# world
# nfx
练习
# 模拟 cp 操作# 1. 创建 cp.py 文件# 2. 将 /usr/bin/ls "拷贝" 到/tmp 目录下# 3. 不要修改原始文件
fr = open("/usr/bin/ls",mode="rb")
fw = open("/tmp/myls",mode="wb")
while True:
data = fr.read(4096) #一次传4kB
if len(data)== 0: #判断传完了没
break
fw.write(data)
fw.close()
fr.close()
with子句
with open() as fr1:
print(fr1)
with语句 是用来简化代码的
在将打开文件的操作放在 with 语句中,代码块结束后,文件将自动关闭
读写文件的逻辑没有变化,变得只是 写法
with open("/etc/hosts",mode='r') as f1:
print(f1.read())
函数
所谓函数,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用
函数的使用包含两个步骤:
定义函数 —— 封装 独立的功能
调用函数 —— 享受 封装 的成果
def xiyiji(): #定义函数
print("123")
print("345")
print("456")
xiyiji() #调用函数
定义函数时候的参数叫做刑事参数
调用函数时候的参数叫做实际参数
''' 文档说明字符串'''
def yhl(name,xb,nl):
'''This is shuoming'''
print("my name is :",name)
print("yes he name is :",name)
print("woshi :",name,xb,nl)
yhl("yhl","nan","23")
def get_sum(a,b=0):# 默认值要放在没有默认值的后面
print(a+b)
get_sum(1)
位置参数
sys模块 sys.argv[1],sys.argv[2]
第一个元素(下标为0的)一定是文价名 之后是传进来的参数
你需要知道
1 读取一个文本文件的内容,有哪些方法?
read()默认值-1或者为-数值 全部读取
readline()一行 默认值-1或者为-数值 全部读取
readlines()剩余全部 返回字符串列表
2 打开文件时,文件对象的访问模式有r、w和a,b。它们的区别是什么?
r读取w写入a 追加 b以二进制模式打开
3 函数默认的返回值是什么?如何自己手工指定返回值,使用哪个关键字?
默认返回值是None
return xxx
4 python中如何使用位置参数?
sys模块的argv[]
sys.argv[0]表示代码本身文件路径