Python 深入浅出 - IO 编程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xingxtao/article/details/78882397

标准输入 - 键盘

默认的标准输入是键盘,Python 内置函数 input() 函数可以从标准输入读入一行文本。

str = input("请输入你的名字:")
print("你的名字:" ,str)

输出结果:

请输入你的名字:star

你的名字: star

文件操作

open() 函数

语法: File object = open(file_name [,access_mode] [,buffering])

参数说明:

  • file_name: 是一个包含要访问的文件名称的字符串值。
  • access_mode : 决定了打开文件的模式。
  • buffering :如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

File 对象

一个文件被打开后,得到一个 File 对象。可以获取该文件的各种信息。

file 属性

  • file.closed: 文件已被关闭,返回 true
  • file.mode : 返回被打开文件访问模式
  • file.name : 返回文件的名称
  • file.softspace: 如果用 print() 输出后,必须跟一个空格符,则放回 false,否则返回 true


file = open("d:\\a.jpg","wb")
print("file.name = ",file.name)
print("file.closed = ", file.closed)
print("file.mode = ",file.mode)

输出结果:

file.name = d:\a.jpg

file.closed = False

file.mode = wb

file 函数

  • file.close():关闭文件,释放资源,关闭文件不能再进行读写操作。
  • file.flush():刷新文件内部缓冲,直接把内部缓冲区数据立即写入到文件。
  • file.filenno():返回一个整型文件描述符。
  • file.isatty():如果文件连接到一个终端设备就返回 True,否则返回 False。
  • file.next():返回文件下一行。
  • file.read([size]):从文件读取指定字节数,如果未给定或为负数,则读取所有。
  • file.readline([size]):读取正整行,包括 “\n” 字符。
  • file.readlines([sizeint]):读取所有行并返回列表,若给定 sizeint>0 ,则是设置一次读取多少字节,这是为了减轻读取压力。
  • file.seek(offset[,whence]): 设置文件当前位置。
  • file.tell():返回文件当前位置。
  • file.truncate([size]):截取文件,截取的字节通过 size 指定,默认为当前文件位置。
  • file.write(str):将字符串写入文件,没有返回值。
  • file.writelines(sequence):向文件写入一个序列字符串列表,如果需要换行则要自己假如每行的换行符。


file_obj = open('D:/read.txt','r+')
try:
    all_content = file_obj.read()
    print("file open success")
    print("all_content = ", all_content)
    print("")
except:
    print("file open failed")
finally:
    file_obj.close()

输出结果:

file open success

all_content = Python 深入浅出

1.HelloWorld

2.函数

3.高阶函数

4.面向对象

file_write = open("D:/write.txt","w")
file_write.write("www.baidu.com")
file_write.close()

输出结果:

OS 文件/目录方法

  • os.access(path,mode):检验权限模式。
  • os.chdir(path):改变当工作目录。
  • os.chflags(path,flags):设置路径的标记为数字标记。
  • os.chmod(path,mode):更改权限。
  • os.chown(path,uid,gid):更改文件所有者。
  • os.chroot(path):改变当前进程的跟目录。
  • os.close(fd):关闭文件描述符 fd。
  • os.closerange(fd_low,fd_high) 关闭所有文件描述符
  • os.dup(fd) 复制文件描述符 fd


import os
print("os.name = ",os.name)
print("os.environ = ",os.environ) #环境变量

输出结果:
os.name = nt

os.environ = environ({‘ALLUSERSPROFILE’: ‘C:\ProgramData’, ‘APPDATA’: ‘C:\Users\Administrator\AppData\Roaming’, ‘COMMONPROGRAMFILES’: ‘C:\Program Files\Common Files’, ‘COMPUTERNAME’: ‘hy-201710072001’, ‘COMSPEC’: ‘C:\Windows\system32\cmd.exe’, ‘DEVMGR_SHOW_DETAILS’: ‘1’, ‘FP_NO_HOST_CHECK’: ‘NO’, ‘HOMEDRIVE’: ‘C:’, ‘HOMEPATH’: ‘\Users\Administrator’, ‘JAVA_HOME’: ‘C:\Program Files\Java\jdk1.8.0_144’, ‘LOCALAPPDATA’: ‘C:\Users\Administrator\AppData\Local’, ‘LOGONSERVER’: ‘\\hy-201710072001’, ‘NUMBER_OF_PROCESSORS’: ‘4’, ‘OS’: ‘Windows_NT’, ‘PATH’: ‘C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_144\bin;C:\Program Files\Git\cmd;C:\Users\Administrator\AppData\Local\Android\sdk\platform-tools;C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\;C:\Users\Administrator\AppData\Local\Programs\Fiddler;E:\Python\venv\Scripts’, ‘PATHEXT’: ‘.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC’, ‘PROCESSOR_ARCHITECTURE’: ‘x86’, ‘PROCESSOR_IDENTIFIER’: ‘x86 Family 6 Model 37 Stepping 2, GenuineIntel’, ‘PROCESSOR_LEVEL’: ‘6’, ‘PROCESSOR_REVISION’: ‘2502’, ‘PROGRAMDATA’: ‘C:\ProgramData’, ‘PROGRAMFILES’: ‘C:\Program Files’, ‘PROMPT’: ‘(venv) P G’, ‘PSMODULEPATH’: ‘C:\Windows\system32\WindowsPowerShell\v1.0\Modules\’, ‘PUBLIC’: ‘C:\Users\Public’, ‘PYCHARM_HOSTED’: ‘1’, ‘PYCHARM_MATPLOTLIB_PORT’: ‘49911’, ‘PYTHONIOENCODING’: ‘UTF-8’, ‘PYTHONPATH’: ‘C:\Program Files\JetBrains\PyCharm 2017.3\helpers\pycharm_matplotlib_backend;E:\Python’, ‘PYTHONUNBUFFERED’: ‘1’, ‘SESSIONNAME’: ‘Console’, ‘SYSTEMDRIVE’: ‘C:’, ‘SYSTEMROOT’: ‘C:\Windows’, ‘TEMP’: ‘C:\Users\ADMINI~1\AppData\Local\Temp’, ‘TMP’: ‘C:\Users\ADMINI~1\AppData\Local\Temp’, ‘USERDOMAIN’: ‘hy-201710072001’, ‘USERNAME’: ‘Administrator’, ‘USERPROFILE’: ‘C:\Users\Administrator’, ‘VIRTUAL_ENV’: ‘E:\Python\venv’, ‘WINDIR’: ‘C:\Windows’, ‘WINDOWS_TRACING_FLAGS’: ‘3’, ‘_OLD_VIRTUAL_PATH’: ‘C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_144\bin;C:\Program Files\Git\cmd;C:\Users\Administrator\AppData\Local\Android\sdk\platform-tools;C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\;C:\Users\Administrator\AppData\Local\Programs\Fiddler’, ‘_OLD_VIRTUAL_PROMPT’: ‘ P G’})

StringIO

StringIO 在内存中 读写 str. getvalue() 方法用于获得写入后的str.

from io import StringIO
f = StringIO()
f.write("Hello,Python")
print(f.getvalue())

StringIO 想内存中写入字符串,再通过 getvalue() 获取。

输出结果:

Hello,Python

序列化

序列化:把变量从内存中变成可以存储或传输的过程。在其他语言中称之为 serialization,marshalling,在 Python 中称之为 pickling。

反序列化:把变量内容从序列化的对象重新读到内存里,称 unpickling。

import pickle
file_tom = open("D:/tom.txt","wb")
d = dict(name="tom",age=20,score=90)
byte_buffer = pickle.dump(d,file_tom)

pickle.dump 将 dict 对象序列化为 bytes,然后写入到文件中。

JSON

JSON 函数

使用 JSON 函数需要导入 JSON 库:import json

函数 描述
json.dumps() 将 Python 对象转换成 JSON 字符串
json.loads() 将 JSON 字符串转换成 Python 对象

内置对象与 JSON 转换

import json
tomcat = dict(name='tomcat',age= 22,score =90)
json_str = json.dumps(tomcat)   # 对象转换成 json 字符串
print(json_str)

tomcat_obj = json.loads(json_str)  # json 字符串转换成对象
print("tomcat_obj type = ",type(tomcat_obj))
print("tomcat_obj = ",tomcat_obj)

输出结果:

{“name”: “tomcat”, “age”: 22, “score”: 90}

tomcat_obj type = <class ‘dict’>

tomcat_obj = {‘name’: ‘tomcat’, ‘age’: 22, ‘score’: 90}

普通 class 对象转换成 JSON

普通 class 对象如果没有做处理,将会转换失败。

TypeError: Object of type ‘Student’ is not JSON serializable

解决办法: dumps(obj,default) 可选参数 default 就是把任意一个对象转换成一个可序列为 JSON 的对象。

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


def stu2dict(stu):
    return {
        'name':stu.name,
        'age':stu.age
    }


stu  = Student("mike",22)
print(json.dumps(stu,default=stu2dict))

输出结果:

{“name”: “mike”, “age”: 22}

JSON 转换成对象

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

    def __str__(self):
        return "name = %s, age = %d" % (self.name,self.age)


def dict2stu(d):
    return Student(d['name'],d['age'])

json_stu = '{"name":"luse","age":15}'
s_obj = json.loads(json_stu,object_hook=dict2stu)  # JSON 转换成对象
print(type(s_obj))
print(s_obj)

输出结果:

<class ‘main.Student’>

name = luse, age = 15

猜你喜欢

转载自blog.csdn.net/xingxtao/article/details/78882397