运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • Go

  • Python

    • 前言

    • python基础

      • 变量
      • 格式化输出和运算符
      • 数据类型
      • 流程控制
      • 文件处理
        • 1. 文件处理流程
        • 2. 基本操作
          • 2.1 上下文管理
          • 2.2 文件的修改
          • 2.3 文件处理模式
          • 2.4 文件内光标移动
        • 3. 字符编码
      • 字符编码原理
      • 函数概念
      • 函数嵌套和作用域
      • 装饰器-迭代器-生成器
      • 递归函数和匿名函数
      • 内置函数
  • Shell

  • Java

  • Vue

  • 前端

  • 编程浅尝
  • Python
  • python基础
lyndon
2023-06-07
目录

文件处理

# 1. 文件处理流程

  • 打开文件,得到文件句柄并赋值给一个变量
  • 通过句柄对文件进行操作
  • 关闭文件

# 2. 基本操作

文件句柄 = open('文件路径',‘模式’)

f=open(‘文件’,’r’)         #以r读模式打开一个文件
f.close()                   #关闭文件,相当于保存
1
2

# 2.1 上下文管理

#第一种方法
with open('a.txt','w')  as  f:
  pass
#第二种方法
with open('a.txt','r')  as read_f,open('b.txt','w')  as  write_f:
  data=read_f.read()
  write_f.write(data)
1
2
3
4
5
6
7

# 2.2 文件的修改

import os
with open('a.txt','r',encoding='utf-8') as read_f,\
        open('a.txt.swap','w',encoding='utf-8') as write_f:
    for line in read_f:
        write_f.write(line)
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
1
2
3
4
5
6
7

# 2.3 文件处理模式

  • r 文本模式的读,如果文件不存在,不会创建新文件,会抛出异常
  • w 文本模式的写,文件存在则清空,不存在则创建
  • a 文本模式的追加,文件存在光标跳到文件末尾,文件不存在创建
  • rb 即直接从硬盘中读取bytes
  • wb 以bytes写模式打开
  • ab 以bytes追加模式打开
  • r+ 读的时候可写
  • w+ 写的时候可读
  • a+ 追加时可读写
# 只读模式
f=open(r'c.txt',encoding='utf-8')
print('====>1',f.read())
print('====>2',f.read())
print(f.readable())
print(f.readline(),end='')
print(f.readline())
print("="*20)
print(f.read())
print(f.readlines())
f.close()

#写模式:文件不存在则创建,文件存在则覆盖原有的
f=open("new.py",'w',encoding='utf-8')
f.write('1111111111\n')
f.writelines(['2222\n','2222548\n','978646\n'])  #一次写入多行
f.close()

# 追加模式:文件不存在则创建,文件存在不会覆盖,写内容是追加的方式写
f=open('new.py','a',encoding='utf-8')
f.write('nishishui\n')
f.writelines(['aa\n','bb\n'])
f.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 2.4 文件内光标移动

  • **f.read() **

    一次性读取文本中全部的内容,以字符串的形式返回结果

f.read(3)
1

文件打开方式为文本模式时,代表读取3个字符;

文件打开方式为b模式时,代表读取3个字节;

unicode格式中3个字节=1个字符

  • **f.seek() **

    控制光标移动几个字节

seek有三种模式:
0    从首字节开始
1    b模式下运行,以当前光标所在的位置为参照物
2    b模式下运行,以最后一个字节为参照物
1
2
3
4

练习:模拟tail –faccess.log

# python3 tail.py -f access.log
import time
import sys

with open(r'%s' % sys.argv[2], 'rb') as f:
    f.seek(0, 2)

    while True:
        line = f.readline()
        if line:
            print(line.decode('utf-8'),end='')
        else:
            time.sleep(0.2)
1
2
3
4
5
6
7
8
9
10
11
12
13
  • truncate()

    文件的打开方式为可写,从文件开头开始截取,留下指定字节之后的字节

  • f.readline()

    只读取文本第一行的内容,以字符串的形式返回结果

  • f.readlines()

    读取文本所有内容,并且以数列的格式返回结果,一般配合for in使用

  • f.readble()

    判断文件是否有读的权限,返回布尔值

  • f.tell()

    查看光标位置

练习:cp文件的python小脚本

import sys

#python3 copy.py source.file target.file
if len(sys.argv) < 3:
    print('Usage:python3 copy.py source.file target.file')
    sys.exit()

#r'C:\Users\Administrator\PycharmProjects\python18期周末班\day3\test.jpg'
with open(r'%s' %sys.argv[1],'rb') as read_f,\
        open(r'%s' %sys.argv[2],'wb') as write_f:

    for line in read_f:
        write_f.write(line)
1
2
3
4
5
6
7
8
9
10
11
12
13

# 3. 字符编码

在文件处理过程中,首先有一个重要的概念,就是字符编码

**字符编码:**把人类的字符编译成计算机能认识的数字

**字符编码表:**就是一张字符与数字对应关系的表

  • ascii
  • gbk
  • utf-8 (硬盘中常用编码)
  • unicode (内存中常用编码)

字符编码转码

  • Unicode ----> encode(‘utf-8’) 编码 ----> bytes
  • bytes ----> decode(‘utf-8’)解码 ----> Unicode

原则:字符以什么格式编译的,就要以什么格式解码

python3中的字符串分为两种

x='egon'  #默认存为unicode
y=x.encode('utf-8')   #使用encode编码为bytes
1
2

python2中字符串也分为两种

x=u'egon'   #加u表示存为Unicode格式,与python3的字符串一样
y='alex'    #默认存为bytes
1
2
上次更新: 2023/07/04, 15:10:38
流程控制
字符编码原理

← 流程控制 字符编码原理→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式