【Python复习巩固 Day5】IO编程

IO在计算机中指Input/Output,也就是输入和输出。

文件读写

在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)

"""
读文件
"""

f = open(r'D:\Code\Python\res/rawData.txt', 'r')
strings = f.read()
print(strings)
f.close()

1988 15.73 15037 18.8 1366
1989 15.04 17001 18 1519
1990 14.39 18718 3.1 1644
1991 12.98 21826 3.4 1893
1992 11.6 26937 6.4 2311
1993 11.45 35260 14.7 2998
1994 11.21 48108 24.1 4044
1995 10.55 59811 17.1 5046
1996 10.42 70142 8.3 5846
1997 10.06 78061 2.8 6420
1998 9.14 83024 -0.8 6796
1999 8.18 88479 -1.4 7159
2000 7.58 98000 0.4 7858
2001 6.95 108068 0.7 8622
2002 6.45 119096 -0.8 9398
2003 6.01 135174 1.2 10542
2004 5.87 159587 3.9 12336
2005 5.89 184089 1.8 14040
2006 5.38 213132 1.5 16024
2007 5.24 235367 1.7 17535
2008 5.45 277654 1.9 19264

Process finished with exit code 0

调用read()会一次性读取文件的全部内容
调用readline()可以每次读取一行的内容吗,并按行返回list

"""
写文件
"""

text = "Hello World!"
with open(r'D:/Code/Python/result/hello.txt', 'w') as f:
    f.write(text)

在这里插入图片描述

StringIO和BytesIO

有时候,数据读写不一定是文件,也可以在内存中读写
其中StringIO用来操作str,BytesIO实现了内存中读写bytes

from io import StringIO

f = StringIO()
f.write("Hello")
f.write(" ")
f.write("World")
print(f.getvalue())
Hello World

Process finished with exit code 0

data = StringIO("Hello\nWorld\nTom\nSam")
for line in data.readlines():
    print(line.strip())
Hello
World
Tom
Sam
from io import BytesIO

f = BytesIO()
f.write('翯'.encode('utf-8'))
print(f.getvalue())

b'\xe7\xbf\xaf'

Process finished with exit code 0

f1 = BytesIO(b'\xe7\xbf\xaf')
print(f1.read())

b'\xe7\xbf\xaf'

Process finished with exit code 0

操作文件和目录

import os

# 操作系统的类型
print(os.name)
# 环境变量
print(os.environ)
# 查看当前目录的绝对路径
print(os.path.abspath('.'))
# 创建一个目录
os.mkdir('./dir')
# 删除一个目录
os.rmdir('./dir')
"""
操作文件和目录
"""
import os

# 操作系统的类型
print(os.name)
# 环境变量
print(os.environ)
# 查看当前目录的绝对路径
print(os.path.abspath('.'))
# 创建一个目录
# os.mkdir('./dir')
# 删除一个目录
# os.rmdir('./dir')
# 路径合并
print(os.path.join('part1', 'part2'))
# 路径分割
print(os.path.split('./test/file.txt'))
# 得到文件扩展名
print(os.path.splitext('./test/file.txt'))
# 文件重命名
# os.rename('test.txt', 'test.avi')
# 删除文件
# os.remove('test.avi')

nt
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Martin\\AppData\\Roaming', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'LYH', 'COMSPEC': 'C:\\Windows\\system32\\cmd.exe', 'CONDA_DEFAULT_ENV': 'base', 'CONDA_PREFIX': 'C:\\Users\\Martin\\anaconda3', 'CONDA_PROMPT_MODIFIER': '(base) ', 'CONDA_SHLVL': '1', 'CONFIGSETROOT': 'C:\\Windows\\ConfigSetRoot', 'DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData', 'FPS_BROWSER_APP_PROFILE_STRING': 'Internet Explorer', 'FPS_BROWSER_USER_PROFILE_STRING': 'Default', 'GO111MODULE': 'on', 'GOPATH': 'D:\\Code\\Go;', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\Martin', 'IDEA_INITIAL_DIRECTORY': 'C:\\Program Files\\JetBrains\\PyCharm 2020.1.1\\bin', 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_202', 'LOCALAPPDATA': 'C:\\Users\\Martin\\AppData\\Local', 'LOGONSERVER': '\\\\LYH', 'NUMBER_OF_PROCESSORS': '8', 'OCL_ROOT': 'D:\\OCL_SDK_Light', 'ONEDRIVE': 'C:\\Users\\Martin\\OneDrive', 'OS': 'Windows_NT', 'PATH': 'C:\\Users\\Martin\\anaconda3;C:\\Users\\Martin\\anaconda3\\Library\\mingw-w64\\bin;C:\\Users\\Martin\\anaconda3\\Library\\usr\\bin;C:\\Users\\Martin\\anaconda3\\Library\\bin;C:\\Users\\Martin\\anaconda3\\Scripts;C:\\Users\\Martin\\anaconda3\\bin;C:\\Users\\Martin\\anaconda3\\condabin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0;C:\\Windows\\System32\\OpenSSH;C:\\Program Files\\Java\\jdk1.8.0_202\\bin;D:\\ProgramFiles\\Xshell;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\iCLS;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\iCLS;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;D:\\ProgramFiles\\Vim\\vim82;D:\\ffmpeg\\bin;D:\\Go\\bin;D:\\Scala\\bin;D:\\MATLAB\\R2018a\\runtime\\win64;D:\\MATLAB\\R2018a\\bin;D:\\nodejs;D:\\opencv\\build\\x64\\vc15\\lib;D:\\opencv\\build\\x64\\vc15\\bin;D:\\ProgramFiles\\Git\\cmd;D:\\MinGW\\bin;D:\\opencv\\mingw-build\\install\\x64\\mingw\\bin;C:\\Users\\Martin\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Program Files\\Microsoft VS Code\\bin;C:\\Users\\Martin\\anaconda3\\Scripts;D:\\ProgramFiles\\Fiddler;D:\\opencv\\build\\x64\\vc15\\bin;C:\\Users\\Martin\\go\\bin;C:\\Users\\Martin\\AppData\\Roaming\\npm', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 142 Stepping 10, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '8e0a', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PROMPT': '(base) $P$G', 'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM_DISPLAY_PORT': '63342', 'PYCHARM_HOSTED': '1', 'PYTHONCODE': 'utf-8', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'D:\\Code\\Python\\PythonStudy;C:\\Program Files\\JetBrains\\PyCharm 2020.1.1\\plugins\\python\\helpers\\pycharm_matplotlib_backend;C:\\Program Files\\JetBrains\\PyCharm 2020.1.1\\plugins\\python\\helpers\\pycharm_display', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\Windows', 'TEMP': 'C:\\Users\\Martin\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\Martin\\AppData\\Local\\Temp', 'USERDOMAIN': 'LYH', 'USERDOMAIN_ROAMINGPROFILE': 'LYH', 'USERNAME': 'Martin', 'USERPROFILE': 'C:\\Users\\Martin', 'VBOX_MSI_INSTALL_PATH': 'D:\\VirtualBox\\', 'WINDIR': 'C:\\Windows'})
D:\Code\Python\PythonStudy\Day5
part1\part2
('./test', 'file.txt')
('./test/file', '.txt')

Process finished with exit code 0

序列化

我们把变量从内存中变成可存储或传输的过程称之为序列化
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上
反过来,把变量从序列化对象重新读到内存里称之为反序列化

"""
序列化
"""

import pickle

d = {
    'name': 'Sam',
    'age': 20,
    'score': 100
}
print(pickle.dumps(d))
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00Samq\x02X\x03\x00\x00\x00ageq\x03K\x14X\x05\x00\x00\x00scoreq\x04Kdu.'

Process finished with exit code 0
print(pickle.loads(data))

{'name': 'Sam', 'age': 20, 'score': 100}

Process finished with exit code 0

如果我们要在不同编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON
在这里插入图片描述

print(json.dumps(d))
{"name": "Sam", "age": 20, "score": 100}

Process finished with exit code 0

dumps方法返回一个str,内容就是标准的JSON
dump方法可以直接把JSON写入文件
loads方法把JSON字符串反序列化
load方法从文件中读取字符串并进行反序列化

eg:用JSON序列化学生对象

"""
用JSON序列化学生对象
"""
import json


class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score


student = Student("Martin", 20, 100)
print(json.dumps(student, default=lambda obj: obj.__dict__))

{"name": "Martin", "age": 20, "score": 100}

Process finished with exit code 0

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值