文章目录
一、文件的打开、读取、加载
1、python内置函数:open()打开、f.read()读取
打开文件open()
若原文件名不存在,则创建该文件
file_obj = open(filename, mode = ‘r’, buffering = -1)
- model 为可选参数,默认值为r( r:读,w:写(先清空文件),a: 追加)
- buffering 也为可选参数,默认值为-1(0代表不缓冲,1或者大于1的值表示缓冲一行或者指定缓冲区大小)
文件的打开
f1 = open('d:\\test.txt')
f2 = open(r'd:\test.txt','w')
f3 = open('test.dat','wb') 二进制文件
open()函数返回一个文件(file)对象,文件对象可迭代
读写文件
有关闭和读写文件相关的函数和方法(对象名.方法名)
– f.read(), f.write(), f.readline(), f.readlines(), f.writelines()
– f.close()
– f.seek()
- file_obj.read(size)
从文件中至多读出size字节数据,返回一个字符串 - file_obj.read()
读文件直至文件结束,返回一个字符串
with open('data.txt','w') as f:
f.write("Hello,番茄大人")
with open('data.txt') as f:
p1 = f.read(5)#读前5个字符
p2 = f.read()#读剩下的字符
'''
'Hello'
',番茄大人'
'''
- file_obj.readlines()
读取多行数据,返回一个列表,不删除换行符 - file_obj.readline()
读取一行数据
data.txt
1,2,3,4,python
5,6,7,8,java
9,10,11,12,c++
13,14,15,16,Javascript
with open('data.txt') as f:
test = f.readlines()
print(test)
'''
['1,2,3,4,python\n', '5,6,7,8,java\n', '9,10,11,12,c++\n', '13,14,15,16,Javascript']
'''
2、pandas库
pandas可以将读取到的表格型数据(文件不一定要是表格)转成DataFrame类型的数据结构,在读取的时候,可先将数据转化为array形式
import pandas as pd
#设置header参数,读取文件的时候没有标题
data = pd.read_csv("data.txt",header=None)
'''
0 1 2 3 4
0 1 2 3 4 python
1 5 6 7 8 java
2 9 10 11 12 c++
3 13 14 15 16 Javascript
'''
#sep参数来修改默认的分隔符
data1 = pd.read_table("data.txt",sep=",")
#设置names参数,来设置文件的标题(第0行)
data2 = pd.read_csv("data.txt",names=["a","b","c","d","name"])
'''
a b c d name
0 1 2 3 4 python
1 5 6 7 8 java
2 9 10 11 12 c++
3 13 14 15 16 Javascript
'''
#设置列索引,默认为0,1,2,...
data3 = pd.read_csv("data.txt",names=["a","b","c","d","name"],index_col="name")
'''
a b c d
name
python 1 2 3 4
java 5 6 7 8
c++ 9 10 11 12
Javascript 13 14 15 16
'''
#跳行读取文件
data4 = pd.read_csv("data.txt",skiprows=[0,3,5])
'''
5 6 7 8 java
0 9 10 11 12 c++
'''
使用pandas在读取文件的时候,pandas会默认将NA、-1.#IND、NULL等当作是缺失值,pandas默认使用NaN进行代替。
3、numpy库
import numpy as np
#默认数据type是浮点型,不指定dtype字符型数据会报错
data =np.loadtxt('data.txt',dtype = str)
'''
array(['1,2,3,4,python', '5,6,7,8,java', '9,10,11,12,c++',
'13,14,15,16,Javascript'], dtype='<U22')
'''
#提供数组功能,速度快
data2 = np.genfromtxt("data.txt", dtype=str, delimiter=",")
'''
array([['1', '2', '3', '4', 'python'],
['5', '6', '7', '8', 'java'],
['9', '10', '11', '12', 'c++'],
['13', '14', '15', '16', 'Javascript']], dtype='<U10')
'''
二、文件的写入、存储
1、python内置函数:f.write()、f.writelines()
#擦除原有数据,重新写入
f = open("data.txt",'w')
f.write("hello,番茄大人")
f.close()
更推荐用with函数的方法,它可以进行文件异常处理,更加简洁有效
with open('data.txt','w') as f:
f.write("Hello,番茄大人")
多行写入
#每一行加序号写入另一个文件
'''
1,2,3,4,python
5,6,7,8,java
9,10,11,12,c++
13,14,15,16,Javascript
'''
with open('data.txt') as f1:
output = f1.readlines()
for i in range(0,len(output)):
output[i] = str(i)+" " +output[i]
with open('data1.txt','w') as f2:
f2.writelines(output)
'''
0 1,2,3,4,python
1 5,6,7,8,java
2 9,10,11,12,c++
3 13,14,15,16,Javascript
'''
[注意]:同一文件不能同时进行写和读,要移动文件指针,可用f.seek(offset,whence = 0)
– 在文件中移动文件指针,从whence(0表示文件头部,1表示当前位置,2表示文件尾部),偏移offset个字节
– whence参数可选,默认值为0
s = 'hello, old tomato'
with open('data1.txt','w') as f:
f.writelines('\n')
f.writelines(s)
f.seek(0,0)
output = f.readlines()
print(output)
'''
['1,2,3,4,python\n', '5,6,7,8,java\n', '9,10,11,12,c++\n', '13,14,15,16,Javascript\n', 'hello, old tomato']
'''
2、np.savetxt()
numpy.savetxt(fname, X, fmt=’%.18e’, delimiter=’ ‘, newline=’\n’, header=’’, footer=’’, comments=’# ', encoding=None)
参数介绍
fname:文件名/文件路径,如果文件后缀是.gz,文件将被自动保存为.gzip格式,np.loadtxt可以识别该格式
X:要存储的1D或2D数组
fmt:控制数据存储的格式
delimiter:数据列之间的分隔符
newline:数据行之间的分隔符
header:文件头步写入的字符串
footer:文件底部写入的字符串
comments:文件头部或者尾部字符串的开头字符,默认是'#'
encoding:使用默认参数
import numpy as np
x = [[1,2,3,4,5],[5,6,7,8,2],[9,10,11,12,2.22],[13,14,15,16,0]]
np.savetxt('data1.txt', x)
test = np.loadtxt('data1.txt')
print(test)
'''
[[ 1. 2. 3. 4. 5. ]
[ 5. 6. 7. 8. 2. ]
[ 9. 10. 11. 12. 2.22]
[13. 14. 15. 16. 0. ]]
'''
使用np.savetxt()存储字符型数据
import numpy as np
x = np.array([1,2,3,4,'leslie'],[5,6,7,8,2],[9,10,11,12,2.22],[13,14,15,16,0])
np.savetxt('data1.txt', x, fmt="%s")
3、to_csv()
to_csv()是DataFrame类的方法
#先将数据转为dataframe
df = pd.DataFrame(data)
#不存索引,默认会将原来的索引看作内容保存进去
df.to_csv(path,index=False,header=False)
4、存储字典文件
字典形式:
cite_dict: defaultdict(<function <lambda> at 0x00000135A13E2C80>, {'1963479517': 33, '2095588566': 9, '1963479629': 13, '2095588629': 1, '1963479732': 5, '141349514': 1, '2095588707': 41, '1891551617': 1, '2460033207': 1}
with open('path/fileName.json', 'w') as f:
json.dump(dictName, f)