文件的概念

文件的概念

计算机的文件,就是存储在某种长期储存设备上的一段数据

长期存储设备包括:硬盘、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相关推荐

  1. 文件读写操作:把文件a.txt中的内容复制到文件b.txt中

    文件读写操作:把文件a.txt中的内容复制到文件b.txt中 package com.io.reader;import java.io.File; import java.io.FileNotFoun ...

  2. linux文件拷到光盘,制作本地yum源(以redhat5.8通过复制光盘文件到本地)

    为什么要制作本地yum源 1.RPM安装方式很多情况下不能有效解决复杂的包依赖关系. 2.而刚安装完成系统的YUM一般是通过联网使用. 3.如果是未注册的redhat5.0以上系统,则不能联网使用yu ...

  3. Java如何将URL读取的内容存入本地文件中

    要想访问网络资源,首先需要建立一个URL对象,通过openStream方法读取指定的资源 读取网络资源内容,要构建一个输入流 要想将内容写入文件,要构建一个文件对象和相应的文件输出流 具体代码实现如下 ...

  4. linux上查看cap文件,如何使用tcpdump在Mac OS X上读取.cap数据包捕获文件 | MOS86

    还可以执行数据包跟踪或嗅探和捕获来自网络的数据包,结果通常是创建一个.上限捕获文件.那个无论您使用何种嗅探网络,网络管理员和安全性专业人士中相当常见的任务,都会创建cap,pcap或wcap数据包捕获 ...

  5. Matlab不小心删除了当前文件夹和工作区,如何恢复命令行窗口、工作区、当前文件夹。

    1.点击页面左上方的主页. 2.最大化页面,找到布局. 因为最小化页面时,看不到布局!!! 3.然后自己选择喜欢的方式即可.

  6. Ubuntu文件拷贝到WIN10出现:一个意外错误使您无法复制该文件夹,错误0*80004005:未指定的错误

    目录 1.问题描述 2.解决方法 ⚡插播一条老家自产的糖心苹果,多个品种,欢迎选购!有问题随时私信我⚡:

  7. 计算机u盘 硬盘无法读取,U盘插到电脑上能显示盘符,但是打开是空的,不能读取里面内容。...

    U盘不能读取内容解决方法如下: 1.当遇到U盘无法读取内容的情况时,首先可以更换USB接口,判断是否是接口的原因. 2.然后,还可以换一台电脑测试一下是否是U盘本身的问题. 3.排除以上情况后,将U盘 ...

  8. c语言中关闭文件的作用,【C语言】计算机中的流和文件概述(文件的概念及打开关闭)...

    [C语言]计算机中的流和文件概述(文件的概念及打开关闭) [C语言]计算机中的流和文件概述(文件的概念及打开关闭) 目录 一.计算机中流 二.文件 1.文件的概念 2.文件的分类 3.文件的缓冲区 4 ...

  9. 网络编程(part2)--文件读写之打开/读取/写入

    鄙人学习笔记 文章目录 文件读写 打开文件 举个例子1(以读方式打开) 举个例子2(以写方式打开) 读取文件 read 举个例子1 readline 举个例子2(继续用例子1的note.txt文件) ...

最新文章

  1. C/C++循环输入问题
  2. mysql可视化工具-navicat的下载和使用
  3. C语言:构建一个二级链表并完成增删改查
  4. linux下添加用户并赋予root权限
  5. 【ABAP】SAP供应商自定义决裁生成实现
  6. 11月上旬息壤网络域名总量呈负增长 份额跌破1%
  7. C# 使用Bitmap类进行图片裁剪
  8. 左耳朵耗子:编程的本质是什么?
  9. 涉密专用计算机平台,涉密计算机及移动存储介质保密管理系统(三合一)
  10. 【2020模拟赛day6】B. 选择人员
  11. 如何使用 CSS 颜色?
  12. sci论文发表的重复率要求低于多少
  13. 使用vue3+vite+cesium,在地图上显示图标,并且点击实体弹出消息框
  14. java连连看代码_Java版连连看
  15. 计算机应用基础——计算机软件(二)
  16. 安装新操作系统需要注意的问题
  17. 计算机网络--IPV4地址详细解释
  18. python实现视频人脸替换_python换人脸视频教程(怎样制作人脸从小到老的变化视频?)...
  19. 解决vue的跨域问题
  20. 深信服AC苹果用户上网认证失败,认证mac地址和用户终端mac地址不一致

热门文章

  1. centos 6.8使用wine安装QQ2016
  2. 面试宝典之高分回答面试题(二)
  3. 微型计算机实验报告,微型计算机实验报告1
  4. 2021 苹果申请邓氏编码
  5. Python 快速入门学习总结
  6. pycharm远程连接服务器问题Uploading PyCharm helpers Python Interpreter... Python helpers are not copied yet
  7. 电子科技大学信息与通信工程学院858考研上岸经验分享(一)
  8. 手机电子邮件用outlook登录
  9. 电子和空穴传输材料,t-Bu-TAZ/TAZ cas150405-69-9
  10. python一些常用函数