2-1-01 文件操作 - 打开关闭和读写

使用模块

# 下载文件等
import requests

1. 读文件

1.1 分类

  • 读文本文件

  • 读图片等非文本内容文件

1.2 路径

相对路径:'info.txt'

绝对路径:'/Users/wupeiqi/PycharmProjects/luffyCourse/day09/info.txt'

image

1.3 模式

mode='rb'  rb,表示读取文件原始的二进制(r, 读 read;b, 二进制 binary;)
mode='rt'   读取的是文本内容

1.4 步骤

1.4.1 rb模式

字节类型 -> 字符串类型  (手动转换

1) 读文本文件

# 1.打开文件
file_object = open('info.txt', mode='rb')


# 2.读取文件内容,并赋值给data
data = file_object.read()

# 3.关闭文件
file_object.close()

# 这个时候读取字节类型
print(data) # b'alex-123\n\xe6\xad\xa6\xe6\xb2\x9b\xe9\xbd\x90-123'

# 把字节类型变成字符串类型
text = data.decode("utf-8")
print(text)

2) 读图片等非文本内容文件 : 字节类型

file_object = open('a1.png', mode='rb')
data = file_object.read()
file_object.close()

print(data) # \x91\xf6\xf2\x83\x8aQFfv\x8b7\xcc\xed\xc3}\x7fT\x9d{.3.\xf1{\xe8\...

1.4.2 rt 模式

字节类型 -> 字符串类型(自动转换

encoding='utf-8'   自动转换

# 1.打开文件**并自动转换成字符串类型**
file_object = open('info.txt', mode='rt', encoding='utf-8')

# 2.读取文件内容,并赋值给data
data = file_object.read()

# 3.关闭文件
file_object.close()

print(data)

1.5 注意事项

1.5.1  路径

  • 相对路径:注意你的程序在哪里运行?

    • 注意现在的程序在哪个目录,执行的文件在哪个路径
  • 绝对路径

# 1.打开文件
file_object = open('/Users/wupeiqi/PycharmProjects/luffyCourse/day09/info.txt', mode='rt', encoding='utf-8')
# 2.读取文件内容,并赋值给data
data = file_object.read()
# 3.关闭文件
file_object.close()
 -  win系统中写绝对路径容易出问题:\和后面字符可能出来新的含义,两种解决方案

1)斜杠用双斜杠表示:
file_object = open('C:\new\info.txt', mode='rt', encoding='utf-8')
2) 在路径前面加上r
file_object = open(r'C:\new\info.txt', mode='rt', encoding='utf-8')

1.5.2 读文件

a. 读文件时,文件不存在程序会报错。
image

Traceback (most recent call last):
  File "/Users/wupeiqi/PycharmProjects/luffyCourse/day09/2.读文件.py", line 2, in <module>
    file_object = open('infower.txt', mode='rt', encoding='utf-8')
FileNotFoundError: [Errno 2] No such file or directory: 'infower.txt'

b. 判断路径是否存在?

  • 定义:
import os   ##   内置模块 os
os.path.exists(file_path)  ##   返回时,存在返回True,不存在返回False
  • 使用方法:
#内置模块 os
import os

file_path = "/Users/wupeiqi/PycharmProjects/luffyCourse/day09/info.txt"

# 传入一个路径
exists = os.path.exists(file_path)
#返回时,存在返回True,不存在返回False

if exists:
    # 1.打开文件
    file_object = open('infower.txt', mode='rt', encoding='utf-8')
    # 2.读取文件内容,并赋值给data
    data = file_object.read()
    # 3.关闭文件
    file_object.close()
    print(data)
else:
    print("文件不存在")

2. 写文件

# 读文件
f1 = open('a1.png',mode='rb')
content = f1.read()
f1.close()
# 写入文件,相当于`**复制**`
f2 = open('a2.png',mode='wb')
f2.write(content)
f2.close()

注意:图片只适用编码二进制模式,也就是 rb 或者 wb

2.1 分类

  • 读文本文件

  • 读图片等非文本内容文件

2.2  步骤-文本文件

2.2.1 wb模式

2.2.1.1  打开文件

模式:wb  w:写 b:二进制   写成二进制
 ```python
 #1.打开文件
file_object = open("t1.txt", mode='wb')


**2.2.1.2 写入内容**

注意:因为打开的是wb,所以写入的是二进制,也就是转化成字类型
```python
file_object.write(    "武沛齐".encode("utf-8")    )

2.2.1.3 文件关闭

file_object.close()

范例

# 1.打开文件
# 路径:t1.txt
# 模式:wb(要求写入的内容需要是字节类型)
file_object = open("t1.txt", mode='wb')

# 2.写入内容
file_object.write(    "武沛齐".encode("utf-8")    )

# 3.文件关闭
file_object.close()

2.2.2 wt模式

wt :w  写   t  文本

file_object = open("t1.txt", mode='wt', encoding='utf-8')

file_object.write("武沛齐")

file_object.close()

2.3 步骤-图片

# 读文件
f1 = open('a1.png',mode='rb')
content = f1.read()
f1.close()
# 写入文件,相当于`**复制**`
f2 = open('a2.png',mode='wb')
f2.write(content)
f2.close()

注意:图片只适用编码二进制模式,也就是 rb 或者 wb

2.4. 基础案例

案例1:用户注册

user = input("请输入用户名:")
pwd = input("请输入密码:")
data = "{}-{}".format(user, pwd)
file_object = open("files/info.txt", mode='wt', encoding='utf-8')
file_object.write(data)
file_object.close()

注意:如果没有info.txt文件,会自动添加该文件

案例2:多用户注册

注意:w写入文件,先清空文件;再在文件中写入内容,每次打开都会清空一次文件*

# w写入文件,先清空文件;再在文件中写入内容。
file_object = open("files/info.txt", mode='wt', encoding='utf-8')
while True:
    user = input("请输入用户名:")
    if user.upper() == "Q":
        break
    pwd = input("请输入密码:")
    #\n  换行,加上换行后,相当于回车
    data = "{}-{}\n".format(user, pwd)

    file_object.write(data)
file_object.close()

image

2.5. 小高级案例:(超前)

案例1:去网上下载一点文本,文本信息写入文件。

1. 下载第三方模块

利用Python想某个网址发送请求并获取结果(利用第三方的模块)

# pip  是python自带的安装工具
# install  安装
# requests  第三方模块名字

image

注意1:

  1. 在pycharm中左下角的Termainal中输入 pip install requests,该文件放在:D:\Python\Scripts的pip3.exe
  2. 如果没有找到该模块的安装目录而导致上方报错,这这样输入:
D:\Python\Scripts\pip3 install requests

image

注意2:

如果安装多个python,则指定某个python去安装

pip3.9 install requests

image

2. 使用第三方模块

import requests

res = requests.get(url="网址")
print(res)
import requests

res = requests.get(
    url="https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=20",
    # headers 输入一个用户信息`User-Agent`----相当于伪造一个用户(爬虫)
    headers={
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
    }
)

# 网络传输的原始二进制信息(bytes)
# res.content

file_object = open('files/log1.txt', mode='wb')
file_object.write(res.content)
file_object.close()

案例2:去网上下载一张图片,图片写入本地文件。

import requests

res = requests.get(
    url="https://hbimg.huabanimg.com/c7e1461e4b15735fbe625c4dc85bd19904d96daf6de9fb-tosv1r_fw1200",
    headers={
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
    }
)

# 网络传输的原始二进制信息(bytes)
# res.content

file_object = open('files/美女.png', mode='wb')
file_object.write(res.content)
file_object.close()

2.6 注意事项

  • 路径
  • 绝对路径
  • 相对路径
  • 文件不存在时,w模式会新建然后再写入内容;文件存在时,w模式会清空文件再写入内容。

3. 文件打开模式

上文我们基于文件操作基本实现了读、写的功能,其中涉及的文件操作模式:rt、rb、wt、wb,其实在文件操作中还有其他的很多模式。

3.1  模式介绍

注意:r 表示读 wxa 都是表示写

# 这几种模式不能独立存在,必须指定是文本还是二进制模式,也就是b
 'r'       # 读
 'w'       # 写,清空文件往里面写,文件存在会覆盖,不存在会创建
 'x'       # 写,文件不存在帮你创建并且写入,如果文件存在就报错,不会任何操作
 'a'       # 写,打开文件往尾部追加,不会给你清空
'b'       # 底层二进制数据,必须是以字节模式存在
 't'       # 文件存在,是将底层的二进制转换成字符串的模式存在,而得到字符串的数据
 
 '+'       # 即可读也可写

3.2 关于文件的打开模式常见应用有:

  • 只读:rrtrb (用)
 1. r 默认相当于rt    #读到字符串的数据
 2. 存在,读 
 3. 不存在,报错
  • 只写:wwtwb(用)
 1. w 默认相当于rt    #读到字符串的数据
 2. 存在,清空再写
 3. 不存在,创建再写
  • 只写:xxtxb    【很少使用
 1. x 默认相当于rt    #读到字符串的数据
 2. 存在,报错
 3. 不存在,创建再写。
  • 只写:aatab【尾部追加】(用)
 1. x 默认相当于rt    #读到字符串的数据
 2. 存在,尾部追加
 3. 不存在,创建再写。
  • 读写
    • r+、rt+、rb+  默认光标位置:起始位置
file_object = open('info.txt', mode='rt+')

# 读取内容
data = file_object.read()
print(data)

# 写入内容
file_object.write("你好呀")

file_object.close()

#注意:要先读后写,因为开始进入后光标位置放在起始位置,如果先写就会从一开始写入,如果先读,那就是先读取数据,光标会移动到最后,再去写入可以添加
  • w+、wt+、wb+,默认光标位置:起始位置(清空文件),每次都会清空文件
#将光标位置重置到起始
file_object.seek(0)
  • x+、xt+、xb+,默认光标位置:起始位置(新文件)【很少用】
  • a+、at+、ab+,默认光标位置:末尾【重点】

可以根据光标位置去记,用的最多的是a。读写模式用的不多,最多的是上面的单独的

3.3 多用户注册案例:

# 每次先打开文件,然后去循环写信息
file_object = open('files/account.txt', mode='a')

while True:
    user = input("用户名:")
    if user.upper() == "Q":
        break
    pwd = input("密码:")
    data = "{}-{}\n".format(user, pwd)
    file_object.write(data)
# 最后循环结束在关闭
file_object.close()

4. 常见功能

1. read,读【常用】

  • 读所有---默认
# mode = r / rt
f = open('info.txt',mode = 'r',encouding = 'itf-8')
data = f.read()
f.close()

# mode = rb 二进制
f = open('info.txt',mode = 'rb')
  • 读n个字符(字节)【不多】
# mode = r / rt 使用文本操作的时候用的多一些
f = open('info.txt',mode = 'r',encouding = 'itf-8')
# 读1个字符
data = f.read(1) 
f.close()
print()#武   字符串类型



# mode = rb 二进制   使用文件上传或断点上传的时候用的比较多
f = open('info.txt', mode='rb')
# 读1个字节
data = f.read(3)
f.close()
print(data, type(data))  # b'\xe6\xad\xa6' <class 'bytes'>
f = open('info.txt', mode='rb')

# 读1个字节
chunk1 = f.read(3)
chunk2 = f.read(3)
chunk3 = f.read(1)
print(chunk1,chunk2,chunk3)

f.close()

2. readline,读一行数据

# 读的第一二行数据
f = open('info.txt', mode='r', encoding='utf-8')
v1 = f.readline()
print(v1)
v2 = f.readline()
print(v2)
f.close()

# 读的每次都是第一行数据
f = open('info.txt', mode='r', encoding='utf-8')
v1 = f.readline()
print(v1)
f.close()
f = open('info.txt', mode='r', encoding='utf-8')
v2 = f.readline()
print(v2)
f.close()
  1. 文件过大,可以用readline来每次读取一行,节省时间和内存
  2. 文件一行过多时,可以用read来读取前几个字节或字符,节省时间和内存

3. readlines,读所有行

每行作业列表的一个元素

data_list = f.readlines()    # 最终生成一个列表,每个元素是一行的数据

image

4. 循环,读大文件(readline加强版)****【常用】

f = open('info.txt', mode='r', encoding='utf-8')
for line in f:
    print(line.strip())
f.close()

5. write,写

f.write("武沛齐")

6. flush,刷到硬盘

f = open('info.txt', mode='a',encoding='utf-8')

while True:
    # 不是写到了硬盘,而是写在缓冲区,系统会将缓冲区的内容刷到硬盘。【时间不确定】 
	f.write("武沛齐")
    # flush 是立即将缓冲区的内容刷到硬盘中
    f.flush()  

f.close()

7. 移动光标位置(字节)

# 移动到指定字节的位置
f.seek(3)   
# 移动到第三个字节,utf-8是一个汉字三个字节

注意:

  1. 在a模式下,调用write在文件中写入内容时,永远只能将内容写入到尾部,不会写到光标的位置。
  2. 可能会出现乱码的情况

8. 获取当前光标位置

f = open('info.txt', mode='r', encoding='utf-8')
# tell获取的永远是字节的位置

p1 = f.tell()
print(p1)  # 0

f.read(3)  # 读3个字符 3*3=9字节

p2 = f.tell()
print(p2)  # 9

f.close()
f = open('info.txt', mode='rb')

p1 = f.tell()
print(p1)  # 0

f.read(3)  # 读3个字节

p2 = f.tell()
print(p2)  # 3

f.close()

5. 上下文管理

之前对文件进行操作时,每次都要打开和关闭文件,比较繁琐且容易忘记关闭文件。

以后再进行文件操作时,推荐大家使用with上下文管理,它可以自动实现关闭文件。

with open("xxxx.txt", mode='rb') as file_object:
    data = file_object.read()
    print(data)

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

with open("xxxx.txt", mode='rb') as f1, open("xxxx.txt", mode='rb') as f2:
    pass

6. 练习

1.补充代码:实现下载视频并保存到本地

import requests
res = requests.get(    url="https://f.video.weibocdn.com/000pTZJLgx07IQgaH7HW010412066BJV0E030.mp4?label=mp4_720p&template=1280x720.25.0&trans_finger=1f0da16358befad33323e3a1b7f95fc9&media_id=4583105541898354&tp=8x8A3El:YTkl0eM8&us=0&ori=1&bf=2&ot=h&ps=3lckmu&uid=3ZoTIp&ab=3915-g1,966-g1,3370-g1,3601-g0,3601-g0,3601-g0,1493-g0,1192-g0,1191-g0,1258-g0&Expires=1608204895&ssig=NdYpDIEXSS&KID=unistore,video",
    headers={        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"    })
# 视频的文件内容
with open('nba.mp4',mode='wb') as file_object: 
  file_object.write(res.content)

2. 日志分析,计算某用户223.73.89.192访问次数。日志文件如下:access.log

49.89.167.91 - - [17/Dec/2020:03:43:50 +0800] "GET /wiki/detail/3/40 HTTP/1.1" 301 0 "-" "Mozilla/5.0(Linux;Android 5.1.1;OPPO A33 Build/LMY47V;wv) AppleWebKit/537.36(KHTML,link Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 LieBaoFast/4.51.3" "-"
49.89.167.91 - - [17/Dec/2020:03:44:11 +0800] "GET /wiki/detail/3/40/ HTTP/1.1" 200 8033 "-" "Mozilla/5.0(Linux;Android 5.1.1;OPPO A33 Build/LMY47V;wv) AppleWebKit/537.36(KHTML,link Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 LieBaoFast/4.51.3" "-"
203.208.60.66 - - [17/Dec/2020:03:47:58 +0800] "GET /media/uploads/2019/11/17/pic/s1.png HTTP/1.1" 200 710728 "-" "Googlebot-Image/1.0" "-"
223.73.89.192 - - [17/Dec/2020:03:48:26 +0800] "GET /wiki/detail/3/40/ HTTP/1.1" 200 8033 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:26 +0800] "GET /static/stark/plugins/font-awesome/css/font-awesome.css HTTP/1.1" 200 37414 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:26 +0800] "GET /static/stark/plugins/bootstrap/css/bootstrap.css HTTP/1.1" 200 146010 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:26 +0800] "GET /static/web/css/commons.css HTTP/1.1" 200 3674 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:26 +0800] "GET /static/mdeditor/editormd/css/editormd.preview.css HTTP/1.1" 200 60230 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:26 +0800] "GET /static/stark/js/jquery-3.3.1.min.js HTTP/1.1" 200 86927 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:26 +0800] "GET /static/stark/plugins/bootstrap/js/bootstrap.min.js HTTP/1.1" 200 37045 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:26 +0800] "GET /static/mdeditor/editormd/lib/marked.min.js HTTP/1.1" 200 19608 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:27 +0800] "GET /static/mdeditor/editormd/lib/prettify.min.js HTTP/1.1" 200 17973 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:27 +0800] "GET /static/mdeditor/editormd/fonts/fontawesome-webfont.woff2?v=4.3.0 HTTP/1.1" 200 56780 "https://pythonav.com/static/mdeditor/editormd/css/editormd.preview.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:27 +0800] "GET /static/mdeditor/editormd/editormd.js HTTP/1.1" 200 163262 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:28 +0800] "GET /static/mdeditor/mdeditor-preview-init.js HTTP/1.1" 200 261 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:29 +0800] "GET /static/stark/plugins/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0 HTTP/1.1" 200 77160 "https://pythonav.com/static/stark/plugins/font-awesome/css/font-awesome.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
223.73.89.192 - - [17/Dec/2020:03:48:29 +0800] "GET /media/uploads/2019/02/22/Gobook/_book/ssl2.png HTTP/1.1" 200 203535 "https://pythonav.com/wiki/detail/3/40/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60" "-"
ip = '223.73.89.192'
total_count = 0
with open('./access.log',mode= 'r',encoding='utf-8') as file:
  for line in file: 
    if not line.startswith(ip):
      continue
    total_count += 1
print(total_count)

3. 日志分析升级,计算所有用户的访问次数。

user_dict = {}
with open('./access.log',mode = 'rt',encoding='utf-8') as file:
  for line in file:
    user_ip = line.split(" ")[0]
    if user_ip in user_dict:
      user_dict[user_ip] += 1 
    else:
      user_dict[user_ip] = 1
print(user_dict)   #{'49.89.167.91': 2, '203.208.60.66': 1, '223.73.89.192': 14}

4. 筛选出股票 当前价大于 20 的所有股票数据。

股票代码,股票名称,当前价,涨跌额,涨跌幅,年初至今,成交量,成交额,换手率,市盈率(TTM),股息率,市值
SH601778,N晶科,6.29,+1.92,+43.94%,+43.94%,259.66万,1625.52万,0.44%,22.32,-,173.95亿
SH688566,吉贝尔,52.66,+6.96,+15.23%,+122.29%,1626.58万,8.09亿,42.29%,89.34,-,98.44亿
SH688268,华特气体,88.80,+11.72,+15.20%,+102.51%,622.60万,5.13亿,22.87%,150.47,-,106.56亿
SH600734,实达集团,2.60,+0.24,+10.17%,-61.71%,1340.27万,3391.14万,2.58%,亏损,0.00%,16.18亿
SH900957,凌云B股,0.36,+0.033,+10.09%,-35.25%,119.15万,42.10万,0.65%,44.65,0.00%,1.26亿
SZ000584,哈工智能,6.01,+0.55,+10.07%,-4.15%,2610.86万,1.53亿,4.36%,199.33,0.26%,36.86亿
SH600599,熊猫金控,6.78,+0.62,+10.06%,-35.55%,599.64万,3900.23万,3.61%,亏损,0.00%,11.25亿
SH600520,文一科技,8.21,+0.75,+10.05%,-24.05%,552.34万,4464.69万,3.49%,亏损,0.00%,13.01亿
SH603682,锦和商业,11.73,+1.07,+10.04%,+48.29%,2746.63万,3.15亿,29.06%,29.62,-,55.42亿
SZ300831,派瑞股份,12.27,+1.12,+10.04%,+208.29%,25.38万,311.41万,0.32%,60.59,-,39.26亿
with open('./stock.txt',mode='r',encoding='utf-8') as file:
    # 1.跳过第一行
    file.readline()
    #2.接着往下读
    for line in file:
        text = line.split(',')[2]
        price = float(text)
        if price > 20:
            print(line.strip())

5. 根据要求修改文件的内容,原文件内容如下:ha.conf

global       
        log 127.0.0.1 local2
        daemon
        maxconn 256
        log 127.0.0.1 local2 info
defaults
        log global
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        option  dontlognull

listen stats :8888
        stats enable
        stats uri       /admin
        stats auth      admin:1234

frontend oldboy.org
        bind 0.0.0.0:80
        option httplog
        option httpclose
        option  forwardfor
        log global
        acl www hdr_reg(host) -i www.luffycity.org
        use_backend www.luffycity.com if www

backend www.luffycity.com
        server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
...

请将文件中的 luffycity修改为 pythonav 。

'''
思路:
1. 文件读到内存,在通过replace(适用于小文件,不适用于大文件)
2. 改个位置读文件的内容,遇到`luffycity`将其替换成 `pythonav` ---如果字符数量一样可以,不然不行
3. 同时打开两个文件,读+写(适用于小文件,也适用于大文件)
'''

# 同时打开两个文件,读+写(适用于小文件,也适用于大文件)
with open("./ha.conf", mode='r', encoding='utf-8') as read_file, open("./new.conf", mode='w',
                                                                      encoding='utf-8') as write_lift:
    for line in read_file:
        new_list = line.replace("luffycity", "pythonav")
        write_lift.write(new_list)
        
        

# 重命名
import shutil
shutil.move("./new_list","./ha.conf")
posted @ 2022-10-19 09:28  布丁家的苏苏  Views(51)  Comments(0)    收藏  举报