文章目录

  • 一、文件的打开、读取、加载
  • 1、python内置函数:open()打开、f.read()读取
  • 2、pandas库
  • 3、numpy库
  • 二、文件的写入、存储
  • 1、python内置函数:f.write()、f.writelines()
  • 2、np.savetxt()
  • 3、to_csv()
  • 4、存储字典文件


一、文件的打开、读取、加载

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)