一、 文件的操作
fname = input("请输入要打开的文件:")
fo = open(fname,"r")
print(fo.readlines())
for line in fo.readlines():
print(line)
fo.close()
1.当php.txt编码为ANSI,正常打开。
2.当要打开的文件编码为UTF-8时,打开时可能会报错,将第29行改为
fo = open(fname,"r",encoding='utf-8')
3.打开方式默认为文本文件模式“t”,windows文本文件以“\r\n”(即回车换行,0D0A,CRLF,acsii值分别为13,10)作为行结束符,而linux等系统文本文件以"\n"为行结束符。
经测试,windows环境中,python的文件读取函数readline()读取到的每行将多出"\n"字符,print()显示后将多出一个空行。
4.执行第30行readlines()函数后,文件操作指针移至文件结尾,所以第31行的readline()返回为空
增加如图第31行代码,将文件操作指针移至文件行首
5.如果使用"a+"追加模式,执行fo.readlines()后,原文件的内容将追加改写!且fo变量将同时变化!之后调用fo变量时需注意这一点
二.数据格式化和处理
1.常用的存储和传输格式:CSV、XML、HTML、JSON
CSV:
城市,环比,同比,定基
北京,101.5,120.7,121.4
上海,101.2,127.3,127.8
广州,101.2,119.4,120
深圳,102,140,145.5
沈阳,100.1,101.4,101.6
XML:
<?xml version="1.0" encoding="UTF-8"?>
<本书作者>
<姓氏>嵩</姓氏><名字>天</名字><单位>北京理工大学</单位>
<姓氏>礼</姓氏><名字>欣</名字><单位>北京理工大学</单位>
<姓氏>黄</姓氏><名字>天羽</名字><单位>北京理工大学</单位>
</本书作者>
HTML:
<!DOCTMPE HTML>
<html>
<body>
<meta charset=gb2312>
<h2 align=center>2016年7月部分大中城市新建住宅价格指数</h2>
<table border='1' align="center" width="70%">
<tr bgcolor='orange'>
<th width="25%">城市</th><th width="25%">环比</th><th width="25%">同比</th><th width="25%">定基</th></tr>
<tr><td align="center">北京</td><td align="center"> 101.5</td><td align="center">120.7</td><td align="center"> 121.4</td></tr>
<tr><td align="center">上海</td><td align="center"> 101.2</td><td align="center">127.3</td><td align="center"> 127.8</td></tr>
<tr><td align="center">广州</td><td align="center"> 101.2</td><td align="center">119.4</td><td align="center"> 120</td></tr>
<tr><td align="center">深圳</td><td align="center"> 102</td><td align="center">140</td><td align="center"> 145.5</td></tr>
<tr><td align="center">沈阳</td><td align="center"> 100.1</td><td align="center">101.4</td><td align="center"> 101.6</td></tr>
</table>
</body>
</html>
JSON:
[
{
"同比": "120.7",
"城市": "北京",
"定基": "121.4",
"环比": "101.5"
},
{
"同比": "127.3",
"城市": "上海",
"定基": "127.8",
"环比": "101.2"
},
{
"同比": "119.4",
"城市": "广州",
"定基": "120",
"环比": "101.2"
},
{
"同比": "140",
"城市": "深圳",
"定基": "145.5",
"环比": "102"
},
{
"同比": "101.4",
"城市": "沈阳",
"定基": "101.6",
"环比": "100.1"
}
]
2.数据格式之间的转换
CSV格式的HTML展示:
# CSV格式的HTML展示
seg1 ='''
<!DOCTMPE HTML>\n<html>\n<body>\n<meta charset=gb2312>
<h2 align=center>2016年7月部分大中城市新建住宅价格指数</h2>
<table border='1' align="center" width="70%">
<tr bgcolor='orange'>\n
'''
seg2 = "</tr>\n"
seg3 = "</table>\n</body>\n</html>"
def fill_data(locls):
seg = '<tr><td align="center">{}</td><td align="center">\
{}</td><td align="center">{}</td><td align="center">\
{}</td></tr>'.format(*locls)
return seg
fr = open("data.csv","r",encoding='utf-8')
ls = []
for line in fr:
line = line.replace("\n","")
ls.append(line.split(","))
print(ls)
fr.close()
fw = open("dataHTML.html","w")
fw.write(seg1)
fw.write('<th width="25%">{}</th><th width="25%">{}</th><th width="25%">{}</th><th width="25%">{}</th>'.format(*ls[0]))
fw.write(seg2)
for i in range(len(ls)-1):
fw.write(fill_data(ls[i+1])+"\n")
fw.write(seg3)
fw.close()
CSV转JSON
# CSV和JSON格式相互转换
import encodings
import json
from tkinter import W
fo = open("data.csv","r",encoding = 'utf-8')
ls = []
for line in fo:
line = line.replace("\n","")
ls.append(line.split(","))
print(ls)
fo.close()
fx = open("datajson.json","w",encoding = 'utf-8')
for i in range(1,len(ls)):
ls[i] = dict(zip(ls[0],ls[i]))
#print(ls)
json.dump(ls[1:],fx,sort_keys=True,indent=4,ensure_ascii=False)
fx.close()
JSON转CSV
fx = open("datajson.json","r",encoding = 'utf-8')
ls = json.load(fx)
data = [list(ls[0].keys())]
for item in ls:
data.append(list(item.values()))
fx.close()
fw = open("dataJSON.csv","w",encoding='utf-8')
for item in data:
fw.write(",".join(item)+"\n")
fw.close()
三.数据序列和反序列化
序列化:是将对象的状态信息转换为可以存储或传输的形式的过程,传输格式一般为JSO和XML
反序列化:指从存储区域将JSON或XML格式读出,并重建对象的过程
序列化函数:json.dumps(obj,sort_keys=False,indent=None),将Python格式转换为JSON格式的字符串,编码过程
反序列化函数:json.loads(string),将JSON格式字符串转换为Python的数据类型,解码过程
zip()是一个内置函数,能够将两个长度相同的列表组合成一个关系对
x = [1,2,3]
y = ["a","b","c"]
print(list(zip(x,y)))
print(dict(zip(x,y)))