open文件读写操作
写入文件内容
open() 是python内置的函数 可以直接来使用。 使用方式
- 传入文件路径
- mode 为文件的权限
- w 写入
- r 读取
- a 追加内容
#打开文件 主要权限
# 读取 r
# 写入 w
# 追加 a
with open('a.txt',mode='w') as file:
# file 相当于 获取到文件类型
# 写入文件内容
file.write("testuser")
上面代码会通过open 写入一个新文件。
使用 open 与 for 循环 批量生成大量的数据。
生成1000个测试账号, 用户名是 testuser1 —— testuser1000, 密码都为123456. 生成之后保存到 users.txt 文件中。
用来生成文本文件的时候,可以使用 open 来操作。#打开文件 主要权限
# 读取 r
# 写入 w
# 追加 a
with open('a.txt',mode='w',encoding="utf8") as file:
# file 相当于 获取到文件类型
# 写入文件内容
for i in range(1,1001):
#每次循环 循环1次 添加1行内容
file.write(f"用户名为testuser{i},密码为123456\n")
读取文件内容
使用读取权限,可以对文件内容进行读取。
# 打开文件 设置读取权限
with open('a.txt',mode='r') as file:
# 读取文件内容
txt = file.read()
print(txt)
可以将文件中的内容读取出来。
csv 文件读写操作
参考文档: https://docs.python.org/zh-cn/3/library/csv.html
写入文件内容
写入1000个测试账号数据到csv文件中。
# 导入 csv模块
import csv
# 打开文件 newline='' 表示新的一行 不用换行。
with open('data.csv',mode='w',encoding='utf8',newline='') as file:
# 调用csv的写入
w = csv.writer(file)
# 写入一行内容 一行的内容必须使用 列表
w.writerow(['用户名','密码'])
for i in range(1,1001):
w.writerow([f'testuser{i}','123456'])
读取文件内容
使用csv 模块读取文件内容
# 导入csv模块
import csv
# 打开文件
with open('data.csv',mode='r',encoding='utf8') as f:
# 创建一个读取的对象
lines = csv.reader(f)
# print(lines)
# 必须使用循环的方式来遍历文件中的每一行内容
for line in lines:
print(line)
文件路径
上面我们做操作使用的文件路径 都是相对路径。也可以使用绝对路径来做。在创建文件的时候,也可以将文件放到指定的目录下,需要创建文件夹。
file内置变量 表示当前文件路径
__file__
python中的内置变量。
# 内置变量
print(__file__) # C:\Users\zengy\PycharmProjects\pythonProject8\main.py
表示的是当前文件在自己电脑中的绝对路径。
创建目录
在项目中创建 reports 目录
# 获取文件所在目录
import os #os 模块中定义了一些跟文件路径相关的操作方法。
# 获取文件的目录
dir = os.path.dirname(__file__)
print(dir) # C:\Users\zengy\PycharmProjects\pythonProject8
# 拼接路径 可以将两个路径拼接到一起
reports = os.path.join(dir,'reports')
print(reports) # C:\Users\zengy\PycharmProjects\pythonProject8\reports
# 创建 reports 目录
os.mkdir(reports)
创建成功之后,如果有目录, 再次创建会报错。
需要判断文件路径
# 获取文件所在目录
import os #os 模块中定义了一些跟文件路径相关的操作方法。
# 获取文件的目录
dir = os.path.dirname(__file__)
print(dir) # C:\Users\zengy\PycharmProjects\pythonProject8
# 拼接路径 可以将两个路径拼接到一起
reports = os.path.join(dir,'reports')
print(reports) # C:\Users\zengy\PycharmProjects\pythonProject8\reports
# 在创建之前先判断一下目录路径 如果目录不存在
if not os.path.exists(reports):
# 创建 reports 目录
os.mkdir(reports)
作业讲解
定义每次相加的结果 设置初始值 0
sum=0 for i in range(1,101):
# 每次运算的时候 查看运算的情况
print(f'{sum}+{i} = {sum+i}')
# 每次循环 都将上次运算的结果 求和
sum = sum+i
循环完成之后 打印最终的结果
print(sum)
---
使用列表推导式 sum函数
```python
# 定义每次相加的结果 设置初始值 0
# sum 函数可以自动去和
print(sum([1,2,3]))
# 传入一个 从1 到100的列表
a = [i for i in range(1,101)]
print(a)
print(sum(a))
# 生成 1-100 的列表
b = list( range(1,101))
print(b)
print(sum(b))
- 使用循环 计算 1+3+5+7 +…+99 之和
```python
100以内的 奇数之和
分析: 要计算 之和 先循环
s = 0 for i in range(1,100,2):打印每次执行的运算
print(f”{s}+{i}={s+i}”)每次运算的结果
s=s+i
print(s)
---
```python
# 生成 列表 存放 1,3,5,
a = [x for x in range(1,100,2)]
print(a)
# 使用sum 函数求和
print(sum(a))
# 使用 list 转换数据
b = list(range(1,101,2))
print(b)
# 使用sum函数求和
print(sum(b))
data.csv 文件中有100行数据,前50行数据读取出来 保存到 a.txt 后50行内容保存到b.txt 文件中。
分析:
with open(‘data.csv’,mode=’r’,encoding=’utf8’) as f:
# 使用csv模块提供的方法创建一个对象
lines = csv.reader(f)
for line in lines:
print(line)
b. 上面代码可以将所有的内容都读取出来,希望 前50行保存到a.txt, 现在的问题是如何循环50次
```python
# 导入csv 进行 读取数据
import csv
with open('data.csv',mode='r',encoding='utf8') as f:
# 使用csv模块提供的方法创建一个对象
lines = csv.reader(f)
# 定义一个计数的变量
count=0
for line in lines:
print(line)
#循环一次 count值增加1
count=count+1
# 前50行数据
if count<=50:
# 将内容写入到 txt 文件中
with open('a.txt',mode='a',encoding='utf8') as fa:
fa.writelines(line)
# 换行
fa.write('\n')
c. 同样的,后50行内容 也需要写入
# 导入csv 进行 读取数据
import csv
# 打开csv 文件
with open('data.csv',mode='r',encoding='utf8') as f:
# 使用csv模块提供的方法创建一个对象
lines = csv.reader(f)
# 定义一个计数的变量
count=0
for line in lines:
# 打印出文件中的每一行内容
print(line)
#循环一次 count值增加1
count=count+1
# 前50行数据
if count<=50:
# 将内容写入到 txt 文件中
with open('a.txt',mode='a',encoding='utf8') as fa:
# whitelines 写入行内容,传入的数据需要列表类型
fa.writelines(line)
# 默认没有换行 换行
fa.write('\n')
else:
#后50行内容
with open('b.txt',mode='a',encoding='utf8') as fa:
fa.writelines(line)
# 换行
fa.write('\n')
写这个代码的 需要大家注意:
- 对齐问题, if … else… 判断语法,需要对齐