文件------概念、基本操作、打开文件的方式、按行读取文件内容、复制文件、文件/目录的常用管理操作、文本文件的编码格式、练习1-4
文件的概念
文件的概念
计算机的文件,就是存储在某种长期储存设备上的一段数据
长期存储设备包括:硬盘、U盘、移动硬盘、光盘。。。
文件的作用
将数据长期保存下来,在需要的时候使用
文件的存储方式
在计算机中,文件是以二进制的方式保存在磁盘上的
文本文件和二进制文件
文本文件
可以使用文本编辑软件查看
本质上还是二进制文件
例如:python的源程序
二进制文件
保存的内容不是给人直接阅读的,而是提供给其他软件使用的
例如:图片文件、音频文件、视频文件等
二进制文件不能使用文本编辑软件查看
文件的基本操作
操作文件的套路
在计算机中要操作文件的套路非常固定,一共包含三个步骤:
1打开文件-→将硬盘中的数据调到内存
2读、写文件→都在内存中进行,写文件最终会将内存中的数据,写入到硬盘
读将文件内容读入内存
写将内存内容写入文件---à存到硬盘
3.关闭文件------将内存中的数据清楚
操作文件的函数/方法
在python中要操作文件,需要记住一个函数和三个方法
open函数负责打开文件,并且返回文件对象
read/write/close三个方法都需要通过文件对象来调用
read方法--读取文件
open函数的第一个参数是要打开的文件名(文件名区分大小写)
如果文件存在,返回文件操作对象
如果文件不存在,会抛出异常
read方法可以一次性读入并返回文件的所有内容
close方法负责关闭文件
如果忘记关闭文件,会造成系统资源消耗,并且会影响到后续对文件的访问
注意:方法执行后,会把文件指针移动到文件的末尾
# 1.打开文件
file = open("README",encoding='UTF-8') # 文件名区分大小写
# 2.读取文件内容
text = file.read()
print(text)
# 3.关闭文件
file.close()
提示:在开发中,通常会先编写打开和关闭的代码,再编写中间针对文件的读/写操作!
recv = open("README","r",encoding='utf-8') #返回一个对象,也是一个句柄
"""
打开README文件,用只读的形式打开,文本编码是UTF-8
"""
#对句柄进行操作
print(recv.read())
#完成操作之后,要关闭文件句柄,从内存中将句柄删除
recv.close()
with open("README","r",encoding='utf-8') as recv:
print(recv.read())
#代码执行完默认,调用关闭的方法#recv.close() 不用写了
with open("README", "r", encoding='utf-8') as recv:
print(recv.read())
print("*" * 50)
print(recv.read()) # 第二次read,没有读到数据
文件指针
文件指针标记从哪个位置开始读取数据
第一次打开文件时,通常文件指针会指向文件的开始位置当执行了read方法后,文件指针会移动到读取内容的末尾
默认情况下会移动到文件末尾
打开文件的方式
open函数默认以只读方式打开文件,并且返回文件对象语法如下:
提示:频整的移动文件指针,会影响文件的读写效率,开发中更多的时候会以只读,只写的方式来操作文件
W读 会报错,会将文件覆盖掉
a 会报错,指针会放到最后 文件没有被覆盖掉
r+ 读写 写的操作,不覆盖源文本 指针在文件开头
w+ 读写 最开始操作的时候,回将文件覆盖,然后才能进行读或写的操作
如果再'w+'模式下,进行read()操作,则返回字符串的长度
a+ 读写,指针放在文件末尾 执行write()操作,会在文本末尾继续写,读取不到内容
按行读取文件内容
read方法默认会把文件的所有内容一次性读取到内存
如果文件太大,对内存的占用会非常严重
readline方法
readline方法可以一次读取一行内容
方法执行后,会把文件指针移动到下一行,准备再次读取
#如果文件太大,在读取文件的时候,如果把内容全部读取,会占用比较大的内存空间
#可以采用一行一行读取的形式
with open("README","r",encoding='utf-8') as recv:
while True:
print(recv.readline().strip("\n")) #.strip()方法,会将读取到的文本末端的\n \t 空格等去掉
if not recv.readline():
break
文件读写案例 —— 复制文件
目标
用代码的方式,来实现文件复制过程
小文件复制
打开一个已有文件,读取完整内容,并写入到另一个文件
# 复制文件的本质是先读取一个文件,然后将内容写入第二个文件
# 有几个open? 首先open第一个文件,都内容,再打开第二个文件,再写内容,最后关闭两个文件
# 方法一:
recv = open("README","r",encoding='utf-8')
content = recv.read()
print(content)
recv2 = open("README_副本","w",encoding='utf-8')
recv2.write(content)
recv2.close()
recv.close()
#方法二:
with open("README","r",encoding='utf-8') as recv:
content = recv.read()
with open("README_副本","w",encoding='utf-8') as recv2:
recv2.write(content)
大文件复制
打开一个已有文件,逐行读取内容,并顺序写入到另一个文件
with open("README","r",encoding='utf-8') as recv:
with open("README_copy","w",encoding='utf-8') as recv2:
while True:
content = recv.readline()
if not content:
break
recv2.write(content)
readlines
with open("README","r",encoding='utf-8') as recv:
#readlines 方法,读取全部内容,在读取过程中,将每一行作为一个元素,村粗到列表中
content = recv.readlines()
print(content)
"""
结果如下:
关关雎鸠,在河之洲。窈窕淑女,君子好逑。
参差荇菜,左右流之。窈窕淑女,寤寐求之。
求之不得,寤寐思服。悠哉悠哉,辗转反侧。
参差荇菜,左右采之。窈窕淑女,琴瑟友之。
参差荇菜,左右芼之。窈窕淑女,钟鼓乐之。
"""
with open("README_copy", "w", encoding='utf-8') as recv2:
for item in content:
recv2.write(item)
文件/目录的常用管理操作
在 终端/文件浏览器 中可以执行常规的 文件/目录 管理操作,例如:
创建、重命名、删除、改变路径、查看目录内容……
在 Python 中,如果希望通过程序实现上述功能,需要导入 os 模块
文件操作
rename 名字会被更改,但是内容不变
os.rename('README_copy', 'README_copy_reanme')
remove 文件被删掉 os.remove('README_copy_reanme')
目录操作
import os
# getcwd
print(os.getcwd())
# 获取当前文件所在的绝对路径, 返回路径名 ==》 G:\yanlian0422\文件操作
import os
#listdir # 列举 目录中的文件或目录
print(os.listdir(r'G:\yanlian0422\文件操作'))
import os
# mkdir
os.mkdir('dir1') # 相对路径
os.mkdir(r'G:\yanlian0422\文件操作\dir2') # 绝对路径
import os
path_1 = "tmp"
# 查看当前工作目录
retval = os.getcwd()
print("当前工作目录为 %s" % retval)
# os.chdir修改当前工作目录
os.chdir(path_1)
# 查看修改后的工作目录
retval = os.getcwd()
print("目录修改成功 %s" % retval)
#path.isdir判断是否是文件
print(os.path.isdir(retval))
文本文件的编码格式
文本文件存储的内容是基于 字符编码 的文件,常见的编码有 ASCII 编码,UNICODE 编码等
Python 2.x 默认使用 ASCII 编码
Python 3.x 默认使用UTF-8 编码
ASCII 编码和 UNICODE编码
ASCII 编码
计算机中只有 256 个 ASCII 字节
一个 ASCII 在内存中占用 1个字节 的空间
8个 0/1 的排列组合方式一共有 256 种,也就是 2**8 种
UTF-8 编码格式
计算机中使用1-6个字节 来表示 一个 utf-8 字符,涵盖了 地球上几乎所有地区的文字
大多数汉字会使用 3个字节 表示
UTF-8 是 Unicode 编码的一种编码格式
Python 2.x 中如何使用中文
在 Python 2.x 文件的第一行 增加以下代码,解释器 会以 utf-8 编码来处理 python 文件
# *-* coding:utf-8 *-*
也可以使用
# coding=utf-8
Unicode 字符串
在 Python 2.x 中,即使指定了文件使用 UTF-8 的编码格式,但是在遍历字符串时,依然会 以字节为单位遍历 字符串
要能够 正确的遍历字符串,在定义字符串时,需要 在字符串的引号前,增加要给 小写字母 u,告诉解释器这是一个 Unicode 字符串(使用 utf-8 编码格式的字符串)
练习1
"""
需求:给诗加上行号
思路:读取诗的每一行,在每一行前面+行号,将心得文件储存下来
不要在源文件上改----保留好文件
"""
#读取诗
with open('pome.txt','r',encoding='utf-8') as file_obj:
contents = file_obj.readlines()
for i in contents:
print(i)
#读取诗
with open('pome.txt','r',encoding='utf-8') as file_obj:
contents = file_obj.readlines()
with open('new_pome.txt', 'a', encoding='utf-8') as new_file:
for i in range(len(contents)):
new_file.write(str(i+1)+'.'+contents[i])
练习2
"""
根据链接 ,下载图片
用python 模拟 浏览器 通过链接, 从 web 服务器 下载内容
"""
"""
https://w.wallhaven.cc/full/l3/wallhaven-l3p9er.png
"""
import requests
# 写一个 get的 请求报文
url = "https://w.wallhaven.cc/full/o3/wallhaven-o3gqm5.jpg"
headers = {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"}
# http://www.useragentstring.com/
res = requests.get(url, headers)
print(res) # <Response [200]>
print(res.content) # res.content 就是 获取到的内容 二进制内容
# 将获取到的内容写入硬盘
with open("pic/2.png", mode='wb') as file_obj:
file_obj.write(res.content)
练习3
"""
筛选内容
筛选当前价 大于20的所有股票数据
"""
with open('files/stock.csv', 'r', encoding='utf-8') as file:
file.readline() # 让指针到达第二行
for line in file:
print(line.splitlines()) # 将 file (从源文件的 第二行开始,)的每一行,都生成一个列表
with open('files/stock.csv', 'r', encoding='utf-8') as file:
file.readline() # 让指针到达第二行
for line in file:
price = float(line.split(',')[2])
# 如果价格 大于 20,把他们筛选出来
if price > 20:
print(line)
练习4
import requests
import os
with open('files/mv1.csv', 'r', encoding='utf-8') as file_object:
file_object.readline() #读取第一行,让指针从第二行开始
for line in file_object:
print(line)
print(line.split(",")) #取列表
print(line.split(',')[1]) #切片
import requests
import os
headers = {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"}
with open('files/mv1.csv', 'r', encoding='utf-8') as file_object:
file_object.readline() #读取第一行,让指针从第二行开始
for line in file_object:
user_id = line.split(",")[0]
url = line.split(",")[1].strip()
print(url)
res = requests.get(url, headers)
print(res)
#判断文件夹是否存在,如果不存在创建一个心的文件夹
if not os.path.exists('download'):
os.mkdir('download')
with open('download/{}.jpg'.format(user_id),mode='wb')as png_object:
png_object.write(res.content)
文件------概念、基本操作、打开文件的方式、按行读取文件内容、复制文件、文件/目录的常用管理操作、文本文件的编码格式、练习1-4相关推荐
- 文件读写操作:把文件a.txt中的内容复制到文件b.txt中
文件读写操作:把文件a.txt中的内容复制到文件b.txt中 package com.io.reader;import java.io.File; import java.io.FileNotFoun ...
- linux文件拷到光盘,制作本地yum源(以redhat5.8通过复制光盘文件到本地)
为什么要制作本地yum源 1.RPM安装方式很多情况下不能有效解决复杂的包依赖关系. 2.而刚安装完成系统的YUM一般是通过联网使用. 3.如果是未注册的redhat5.0以上系统,则不能联网使用yu ...
- Java如何将URL读取的内容存入本地文件中
要想访问网络资源,首先需要建立一个URL对象,通过openStream方法读取指定的资源 读取网络资源内容,要构建一个输入流 要想将内容写入文件,要构建一个文件对象和相应的文件输出流 具体代码实现如下 ...
- linux上查看cap文件,如何使用tcpdump在Mac OS X上读取.cap数据包捕获文件 | MOS86
还可以执行数据包跟踪或嗅探和捕获来自网络的数据包,结果通常是创建一个.上限捕获文件.那个无论您使用何种嗅探网络,网络管理员和安全性专业人士中相当常见的任务,都会创建cap,pcap或wcap数据包捕获 ...
- Matlab不小心删除了当前文件夹和工作区,如何恢复命令行窗口、工作区、当前文件夹。
1.点击页面左上方的主页. 2.最大化页面,找到布局. 因为最小化页面时,看不到布局!!! 3.然后自己选择喜欢的方式即可.
- Ubuntu文件拷贝到WIN10出现:一个意外错误使您无法复制该文件夹,错误0*80004005:未指定的错误
目录 1.问题描述 2.解决方法 ⚡插播一条老家自产的糖心苹果,多个品种,欢迎选购!有问题随时私信我⚡:
- 计算机u盘 硬盘无法读取,U盘插到电脑上能显示盘符,但是打开是空的,不能读取里面内容。...
U盘不能读取内容解决方法如下: 1.当遇到U盘无法读取内容的情况时,首先可以更换USB接口,判断是否是接口的原因. 2.然后,还可以换一台电脑测试一下是否是U盘本身的问题. 3.排除以上情况后,将U盘 ...
- c语言中关闭文件的作用,【C语言】计算机中的流和文件概述(文件的概念及打开关闭)...
[C语言]计算机中的流和文件概述(文件的概念及打开关闭) [C语言]计算机中的流和文件概述(文件的概念及打开关闭) 目录 一.计算机中流 二.文件 1.文件的概念 2.文件的分类 3.文件的缓冲区 4 ...
- 网络编程(part2)--文件读写之打开/读取/写入
鄙人学习笔记 文章目录 文件读写 打开文件 举个例子1(以读方式打开) 举个例子2(以写方式打开) 读取文件 read 举个例子1 readline 举个例子2(继续用例子1的note.txt文件) ...
最新文章
- C/C++循环输入问题
- mysql可视化工具-navicat的下载和使用
- C语言:构建一个二级链表并完成增删改查
- linux下添加用户并赋予root权限
- 【ABAP】SAP供应商自定义决裁生成实现
- 11月上旬息壤网络域名总量呈负增长 份额跌破1%
- C# 使用Bitmap类进行图片裁剪
- 左耳朵耗子:编程的本质是什么?
- 涉密专用计算机平台,涉密计算机及移动存储介质保密管理系统(三合一)
- 【2020模拟赛day6】B. 选择人员
- 如何使用 CSS 颜色?
- sci论文发表的重复率要求低于多少
- 使用vue3+vite+cesium,在地图上显示图标,并且点击实体弹出消息框
- java连连看代码_Java版连连看
- 计算机应用基础——计算机软件(二)
- 安装新操作系统需要注意的问题
- 计算机网络--IPV4地址详细解释
- python实现视频人脸替换_python换人脸视频教程(怎样制作人脸从小到老的变化视频?)...
- 解决vue的跨域问题
- 深信服AC苹果用户上网认证失败,认证mac地址和用户终端mac地址不一致
热门文章
- centos 6.8使用wine安装QQ2016
- 面试宝典之高分回答面试题(二)
- 微型计算机实验报告,微型计算机实验报告1
- 2021 苹果申请邓氏编码
- Python 快速入门学习总结
- pycharm远程连接服务器问题Uploading PyCharm helpers Python Interpreter... Python helpers are not copied yet
- 电子科技大学信息与通信工程学院858考研上岸经验分享(一)
- 手机电子邮件用outlook登录
- 电子和空穴传输材料,t-Bu-TAZ/TAZ cas150405-69-9
- python一些常用函数