标准输入 - 键盘
默认的标准输入是键盘,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)
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