python文件读写

本文时学习python过程中的学习记录,方便复习。

学习的教程有: w3c, 崔大;十分感谢各大佬的总结。

1.TXT文件读写

  • 打开方式(二进制形式【加b】/默认形式)
    • 只读
    • 只写
    • 读写
    • 追加
  • 方法,函数

2.json文件读写

  • 本质: 在1打开文件基础上,调用json库的方法

  • 常用方法

    • loads()将字符串转化为json对象
    • dumps()将json对象转化为字符串
      • indent=2,表示转为字符串时格式化,每行缩进2格
      • ensure_ascii = False,且指定文件的输入编码,即可输入中文
  • json对象的取值

    • jsonObj[‘name’]
    • jsonObj.get(‘name’)
    • 对比: 第二种方法,当键名不存在时,会返回None,或第二个参数————默认值(如get(‘name’, ‘Li’)
  • json数据写入文件

    将json转为字符串,然后f.write(字符串)

    • 读取

      独处json数据后,将字符串转为json对象

    • 注意

      json数据要用双引号包括,不能用但引号,不然loads()方法会解析失败(如: {“name”: “ha”} )


3.csv文件

  • 调用csv库,传入文件句柄,获得csv库封装的写入对象
  • 常用写入对象方法
    • csv.writer(fileObj)
    • csv.DictWriter(fileObj)

csv.writer(fileObj)

1
2
3
4
5
6
import csv

with open('data.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['id', 'name', 'age'])
writer.writerow(['10001', 'Mike', 20])

也具有writerows()方法,一次写入多行,需要传入一个二维数组

csv.DictWriter(fileObj)

在进行数据获取时,经常会得到字典类型的数据,改写入对象方便对字典进行操作

1
2
3
4
5
6
7
8
import csv

with open('data.csv', 'w') as csvfile:
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20})
writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22})
  • csv文件读取

    • 法一:

      1
      2
      3
      4
      5
      6
      import csv

      with open('data.csv', 'r', encoding='utf-8') as csvfile:
      reader = csv.reader(csvfile)
      for row in reader:
      print(row)

      输出结果:

      1
      2
      3
      4
      5
      6
      ['id', 'name', 'age']
      ['10001', 'Mike', '20']
      ['10002', 'Bob', '22']
      ['10003', 'Jordan', '21']
      ['10004', 'Durant', '22']
      ['10005', '王伟', '22']
    • 法二:

      1
      2
      3
      4
      import pandas  as pd

      df = pd.read_csv('data.csv')
      print(df)

      输入结果:

      1
      2
      3
      4
      5
      6
            id    name  age
      0 10001 Mike 20
      1 10002 Bob 22
      2 10003 Jordan 21
      3 10004 Durant 22
      4 10005 王伟 22