python入门知识(十):file文件操作+os模块+shutil模块

一、file文件操作

(一)文本文件和二进制文件

  • 文本文件:存储的是“字符”文本,python默认为unicode字符集。
  • 二进制文件:将数据内容用“字节”进行存储,无法用记事本打开。

(二)文件操作相关模块概述

在这里插入图片描述
在这里插入图片描述

(三)创建文件对象open()

  • 基本语法格式:open(文件名[,打开方式])
  • 打开方式有下图几种:
    在这里插入图片描述
  • 注:文件名可以输入全路径,比如:D:\a\b.txt;也可以使用原始字符串:r"d:\b.txt"
  • 例子:open(r"d:\a.txt",“a”)

(四)文本文件的写入

1.基本的文件写入操作

  • 创建文件对象
  • 写入数据
  • 关闭文件对象
f=open(r"a.txt","a")
s="hello"
f.write(s)
f.close()

2.中文乱码问题

当用以下程序向文件中写入中文时,文件会出现乱码

f=open(r"a.txt","a")
s="你好"
f.write(s)
f.close()

在这里插入图片描述
Linux操作系统默认的编码是utf-8,utf-8可以看做是unicode的实现。
windows操作系统默认的编码是GBK
python默认的编码是unicode
由于编码和解码需要是同一种编码方法,所以在python中打开文件f=open,输入中文f.write并关闭文件f.close,然后查看建成的txt文件时,需要右键->file Encoding->GBK,才能将乱码转为中文。

(五)关闭流要点

1.try异常管理

用try…finally语句确保文件无论在何种情况下,都能关闭

try:
	f=open(r"b:\a.txt","a")
	str="hello"     #或str=["aaa\n","bbb\n","ccc\n"]
	f.write(str)    #或f.writeline(str) 用于写入字符串列表
except BaseError as e:
	print(e)
finally:
	f.close()

2.with语句(上下文管理器)

with执行完语句块后,会自动还原操作环境,因此能够确保文件的正确关闭。

s=['gao','kk']
with open(r"d:\a.txt","a") as f:
	f.writeline(s)

(六)文本文件的读取

  • read([size]):从文件中读取size个字符,并作为字符返回。若不指定size,则会读取整个文件。
  • readline():读取一行内容作为结果返回。
  • readlines():每一行作为一个字符串存入列表中,并返回该列表。
#读取文本内容
with open(r"a.txt","r",encoding="GBk") as f:
	str=f.read()
	print(str)

#按行读取一个文件
with open(r"a.txt","r",encoding="utf-8") as f:
	while True:
		fragment=f.readline()
		if not fragment:    #读取行内容为空
			break
		else:
			print(fragment,end='')  #不写end=‘’,那么执行print后,就会自动空一行

#按行读取一个文件(使用迭代器)
with open(r"a.txt","r") as f:
	for a in f:
		print(a,end='')

(七)enumerate()函数和推导式生成列表

将文件中的每一行加上行号,例如将[“i love you”,“爱你”],变成[“i love you #0”,“爱你 #1”]

>>>a=["i love you","爱你"]
>>>b=enumerate(a)   
>>>print(list(b))
[(0,"i love you"),(1,"爱你")]
>>>c=[temp+"#"+str(index) for index,temp in enumerate(a)]
>>>c
["i love you #0","爱你 #1"]

with open(r"a.txt","r",encoding="utf-8") as f:
	lines=f.readlines()    #把文件中每一行的信息读取到lines中,并返回一个列表
	c=[temp.rstrip()+"  #"+str(index) for index,temp in enumerate(lines)]   #把列表lines中的每一行信息加上行号,再组成一个列表
with open("e.txt","w",encoding="utf-8") as f:
	f.writelines(c)  

(八)(二进制文件)图片文件的拷贝

with open("aa.gif","rb") as f:           #打开aa图片
	with open("aacopy.gif","wb") as w:   #新建图片
		for line in f.readline():        #读取aa中的内容
			w.write(line)                #将每一行的内容写入到新建的文件中

(九)文件对象常用方法和属性的总结

在这里插入图片描述
在这里插入图片描述

with open("a.txt","r",encoding="utf-8") as f:
	print("文件的名字是:{0}".format(f.name))
	print(f.tell())  #返回当前指针在文件中的位置
	print("文件的内容是:{0}".format(str(f.readline()))   #读取一行内容 
	f.tell()
	f.seek(5,1)   #从当前位置向后偏移5个位移量
	print("文件的内容是:{0}".format(str(f.readline()))

(十)使用pickle实现序列化和反序列化

通过实现对象的序列化和反序列化,可以将内存块的数据保存到硬盘上,或通过网络传输给其他计算机。
序列化:将对象转化成为“串行化”数据形式;
反序列化:将“串行化”数据形式转化成为对象。
(把信息变成一串,需要的话,就像流水一样转到其他地方,再将一串数据复原)

pickle.dump(obj,file)
pickle.load(file)
#将信息序列化
import pickle
with open(r"d:/data.dat","wb") as f:   #拓展名(这里是.dat)可以随便起,没有也可以。不过这里一定是wb,表示写入二进制文件
	a1='hello'          #假设有很多信息
	a2=20
	a3=[20,50]

	pickle.dump(a1,f)   #将信息分别存入文件中
	pickle.dump(a2,f)
	pickle.dump(a3,f)

#反序列化
with open(r"d:/data.dat","rb") as f:
	b1=pickle.load(a1,f)    #按照存入的顺序,再分别取出
	b2=pickle.load(a2,f)
	b3=pickle.load(a3,f)

	print(b1);print(b2):print(b3)  #这里a1和b1是两个不同的对象

(十一)csv文件的读取和写入

csv文件是excel表格的简单版,里面的值没有类型,都是字符串。

import csv
#读取csv文件
with open("dd.csv","r") as f:
	a_csv=csv.reader(f)    
	for i in a_csv:
		print(list(i))

#写入csv文件
with open("ee.csv","w") as f:
	b_csv=csv.writer(f)
	b_csv.writerow(['ID','NAME'])
	b_csv.writerow(['10020','judy'])
	
	c=[['10021','edision'],['10023','mandy']]
	b_csv.writerows(c)

二、os模块

os模块可以帮助我们对操作系统进行操作,比如直接操作文件、目录等等。

  • os调用操作系统文件和命令
#使用os.system调用windows系统的记事本程序
import os
os.system("notepad.exe")

#使用os.system查看是否能够连接(ping)百度网页
import os
os.system("ping www.baidu.com")
  • os调用可执行的文件
os.startfile(r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe")

在这里插入图片描述

在这里插入图片描述
注1:os.rename(“电影”,“movie”) 将电影重新命名为movie
注2:os.listdir(‘movie’) 列出movie下的所有一级子目录
在这里插入图片描述
注3:rmdir和removedirs只能删除空目录
注4:os.makedirs("…/音乐/周杰伦") …/指的是在上一级目录中建立新的目录

在这里插入图片描述

import os
import os.path    #from os import path
#------判断:绝对路径、是否目录、是否文件、文件是否存在-----------
print(os.path.isabs('d:/a.txt'))   
print(os.path.isdirs('d:/a.txt'))
print(os.path.isfile('d:/a.txt'))
print(os.path.exists('d:/a.txt'))
#-------------获得文件基本信息-----------
print(os.path.getsize('d:/a.txt'))
print(os.path.abspath('d:/a.txt'))
print(os.path.dirname('d:/a.txt'))

print(os.path.getatime('d:/a.txt'))   #这里返回的是从1970年到现在的总毫秒数
print(os.path.getmtime('d:/a.txt'))
#-------------对文件路径做操作-----------
path=os.path.abspath('d:/a.txt')
print(os.path.split(path))    #以文件名为分界点对路径进行切割,然后放在元组内返回
print(os.path.splitext(path))    #以拓展名为分界点对路径进行切割,然后放在元组内返回
print(os.path.join('a','b','c'))  #a\b\c

练习

#列出指定目录下的所有.py文件,并输出文件名
import os
path = getcwd()
file_list = os.listdir(path)   #返回当前文件夹下所有的目录和文件
for file_name in file_list:
	if file_name.endwith('py'):
		print(file_name)

#--------------用列表推导式生成列表------------------
list_file=[file_name for file_name in file_list if file_name.endwith('py')]
for file_name in list_file:
		print(file_name,end='\t')   #打印列表

  • work()递归遍历所有文件和目录
    os.walk()返回一个3个元素的元组,(dirpath,dirnames,filenames)-> (指定目录的路径,路径下所有文件夹,路径下所有文件)
#coding=utf-8
list=[]
import os
path=os.getcwd()
list_files=os.walk(path)
for dirpath,dirnames,dirfiles in list_files:
	for dir in dirnames:
		list.append(os.path.join(dirpath,dir))
	for file in dirfiles:
		list.append(os.path.join(dirpath,file))

for f in list:
	print(f)

三、shutil模块(拷贝和压缩)

shutil模块主要用来做文件的拷贝、压缩和删除。

import shutil
#----------------拷贝---------------------
shutil.copyfile("1.txt","1.copy.txt")
shutil.copytree("movie/港台","电影",ignore=shutil.igore_patterns("*.html"))   #将movie/港台底下的所有东西,拷贝到目录“电影”中,但不拷贝拓展名为html的文件

#----------- ----压缩-----------------------
shutil.make_achieve("电影/gg","zip","movie/港台") #将港台压缩成gg.zip,放在电影文件夹下

#将1.txt和1.copy.txt压缩成a.zip,w表示写入模式
z1=zipfile.ZipFile("d:/a.zip","w")  
z1.write("1.txt")
z1.writ("1.copy.txt")
z1.close()

#将a.zip解压缩到“电影”文件夹下,r表示读取模式
z2=zipfile.ZipFile("d:/a.zip","r")  
z2.extractall("电影")
z2.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Linux中,可以使用Python脚本来复制文件。你可以使用osshutil这两个Python模块来实现。首先,你需要导入这两个模块:import shutil import os。然后你可以使用shutil模块的copy函数来复制文件。这个函数接受两个参数,第一个参数是要复制的文件的路径,第二个参数是目标文件夹的路径。你可以使用os模块的path.join函数来拼接文件路径。下面是一个复制文件的示例代码: import shutil import os def copy_file(source_file, target_folder): shutil.copy(source_file, target_folder) source_file = "/path/to/source/file.txt" target_folder = "/path/to/target/folder" copy_file(source_file, target_folder) 这个示例代码中,source_file是要复制的文件的路径,target_folder是目标文件夹的路径。你只需要将这两个路径替换成你自己的路径即可。然后,调用copy_file函数,传入source_file和target_folder作为参数,就可以将文件复制到指定文件夹了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用Python复制Linux文件到指定文件夹](https://blog.csdn.net/gaoyueace/article/details/88648421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Linux下创建python脚本并运行(入门)](https://blog.csdn.net/weixin_30822467/article/details/116654807)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [xml文件批量处理python脚本](https://download.csdn.net/download/caoxinri123/88239057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值