open文件读写操作

写入文件内容

open() 是python内置的函数 可以直接来使用。 使用方式

  • 传入文件路径
  • mode 为文件的权限
    • w 写入
    • r 读取
    • a 追加内容
      1. #打开文件 主要权限
      2. # 读取 r
      3. # 写入 w
      4. # 追加 a
      5. with open('a.txt',mode='w') as file:
      6. # file 相当于 获取到文件类型
      7. # 写入文件内容
      8. file.write("testuser")
      image.png
      上面代码会通过open 写入一个新文件。
      使用 open 与 for 循环 批量生成大量的数据。
      生成1000个测试账号, 用户名是 testuser1 —— testuser1000, 密码都为123456. 生成之后保存到 users.txt 文件中。
      1. #打开文件 主要权限
      2. # 读取 r
      3. # 写入 w
      4. # 追加 a
      5. with open('a.txt',mode='w',encoding="utf8") as file:
      6. # file 相当于 获取到文件类型
      7. # 写入文件内容
      8. for i in range(1,1001):
      9. #每次循环 循环1次 添加1行内容
      10. file.write(f"用户名为testuser{i},密码为123456\n")
      用来生成文本文件的时候,可以使用 open 来操作。

读取文件内容

使用读取权限,可以对文件内容进行读取。

  1. # 打开文件 设置读取权限
  2. with open('a.txt',mode='r') as file:
  3. # 读取文件内容
  4. txt = file.read()
  5. print(txt)

可以将文件中的内容读取出来。

csv 文件读写操作

参考文档: https://docs.python.org/zh-cn/3/library/csv.html

写入文件内容

写入1000个测试账号数据到csv文件中。

  1. # 导入 csv模块
  2. import csv
  3. # 打开文件 newline='' 表示新的一行 不用换行。
  4. with open('data.csv',mode='w',encoding='utf8',newline='') as file:
  5. # 调用csv的写入
  6. w = csv.writer(file)
  7. # 写入一行内容 一行的内容必须使用 列表
  8. w.writerow(['用户名','密码'])
  9. for i in range(1,1001):
  10. w.writerow([f'testuser{i}','123456'])

读取文件内容

使用csv 模块读取文件内容

  1. # 导入csv模块
  2. import csv
  3. # 打开文件
  4. with open('data.csv',mode='r',encoding='utf8') as f:
  5. # 创建一个读取的对象
  6. lines = csv.reader(f)
  7. # print(lines)
  8. # 必须使用循环的方式来遍历文件中的每一行内容
  9. for line in lines:
  10. print(line)

文件路径

上面我们做操作使用的文件路径 都是相对路径。也可以使用绝对路径来做。在创建文件的时候,也可以将文件放到指定的目录下,需要创建文件夹。

file内置变量 表示当前文件路径

__file__ python中的内置变量。

  1. # 内置变量
  2. print(__file__) # C:\Users\zengy\PycharmProjects\pythonProject8\main.py

表示的是当前文件在自己电脑中的绝对路径。

创建目录

在项目中创建 reports 目录

  1. # 获取文件所在目录
  2. import os #os 模块中定义了一些跟文件路径相关的操作方法。
  3. # 获取文件的目录
  4. dir = os.path.dirname(__file__)
  5. print(dir) # C:\Users\zengy\PycharmProjects\pythonProject8
  6. # 拼接路径 可以将两个路径拼接到一起
  7. reports = os.path.join(dir,'reports')
  8. print(reports) # C:\Users\zengy\PycharmProjects\pythonProject8\reports
  9. # 创建 reports 目录
  10. os.mkdir(reports)

创建成功之后,如果有目录, 再次创建会报错。
image.png
需要判断文件路径

  1. # 获取文件所在目录
  2. import os #os 模块中定义了一些跟文件路径相关的操作方法。
  3. # 获取文件的目录
  4. dir = os.path.dirname(__file__)
  5. print(dir) # C:\Users\zengy\PycharmProjects\pythonProject8
  6. # 拼接路径 可以将两个路径拼接到一起
  7. reports = os.path.join(dir,'reports')
  8. print(reports) # C:\Users\zengy\PycharmProjects\pythonProject8\reports
  9. # 在创建之前先判断一下目录路径 如果目录不存在
  10. if not os.path.exists(reports):
  11. # 创建 reports 目录
  12. os.mkdir(reports)

作业讲解

  1. 使用循环 计算 1—100 之和 ```python

    1- 100 之和

    分析: 要计算 之和 先循环 1-100

定义每次相加的结果 设置初始值 0

sum=0 for i in range(1,101):

  1. # 每次运算的时候 查看运算的情况
  2. print(f'{sum}+{i} = {sum+i}')
  3. # 每次循环 都将上次运算的结果 求和
  4. sum = sum+i

循环完成之后 打印最终的结果

print(sum)

  1. ---
  2. 使用列表推导式 sum函数
  3. ```python
  4. # 定义每次相加的结果 设置初始值 0
  5. # sum 函数可以自动去和
  6. print(sum([1,2,3]))
  7. # 传入一个 从1 到100的列表
  8. a = [i for i in range(1,101)]
  9. print(a)
  10. print(sum(a))
# 生成 1-100 的列表
b = list( range(1,101))
print(b)
print(sum(b))
  1. 使用循环 计算 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))
  1. data.csv 文件中有100行数据,前50行数据读取出来 保存到 a.txt 后50行内容保存到b.txt 文件中。
    分析:

    1. 先将数据从文件中读取出来。 ```python

      导入csv 进行 读取数据

      import csv

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')

写这个代码的 需要大家注意:

  1. 对齐问题, if … else… 判断语法,需要对齐

image.png python基础-02.mp4 (884.8MB)python-02.mp4 (1.9GB)