Txt文件读写处理Python
欢迎闲逛~~~
1.Txt读取
以Aminer-Paper文件为例,这个文件网上随便一搜就有
这里的dir是自己设置的默认路径
1.按照字节读取
with open(os.path.join(dir, 'Aminer-Paper.txt'), 'r', encoding='UTF-8') as f:
line = f.read(3) #3表示字节数
print(line)
输出:
#in
2.按照行读取
with open(os.path.join(dir, 'Aminer-Paper.txt'), 'r', encoding='UTF-8') as f:
line = f.readline()
print(line)
输出:
#index 1
3.读取整个数据
with open(os.path.join(dir, 'AMiner-Paper.txt'), 'r', encoding='UTF-8') as f:
line=f.readlines() #注意这里是readlines
print(line)
输出:
#index1
....(文件太大,不建议这样读取)
4.按照行读取,查看前几行数据
with open(os.path.join(dir, 'AMiner-paper.txt'), 'r', encoding='UTF-8') as f:
for i, line in enumerate(f): #注意这里的i是行数,line是值
if i<4
print(line)
输出:
#index 1
#* Book Review: Discover Linux
#@ Marjorie Richardson
2.Txt文件读写r,w,a的使用
读:r
写:w 这里的写是在文件内写入,覆盖先前存在的内容
追加:a 这里的追加是在先前存在的内容后写入
可读可写:r+ 文件不存在会报错
可读可写:w+ 文件不存在会创建
可写可追加:a+ 文件不存在会创建
二进制文件加b:rb wb abrb+ wb+ ab+
举个例子:在原有文件A后追加文件B前10行的内容
h=open('C:/Users/Totoroyun/Desktop/A.txt','a+') #注意这里a+是可写可追加
f=open('C:/Users/Totoroyun/Desktop/B.txt','r') #注意这里r是可读
for i, line in enumerate(f): #行和value
if i <10:
h.write(line)
f.close()
h.close()
A文件先前的内容:
B文件的内容:
追加之后A的内容:
3.Txt文件处理
1.获取特定格式的数据
with open(os.path.join(dir, 'AMiner-Paper.txt'), 'r', encoding='UTF-8') as f:
for i, line in enumerate(f):
if i<100:
if 'index' in line:
print(line)
输出是前100行中带有index的行数据
2.获取特定数据,并规整
with open(os.path.join(dir, 'AMiner-Paper.txt'), 'r', encoding='UTF-8') as f:
dict_list = []
c_dict = {}
for i, line in enumerate(f):
c_line = line.strip()[1:].strip() #默认删除空白符(包括'\n', '\r', '\t', ' ')
if len(c_line)<1: #这里主要用来判断空行,index之间以空行隔开了(只适用于本例)
if len(c_dict)>0:
dict_list += [c_dict] #将赋值的字典放到list里面
c_dict = {}
else:
c_frag = c_line.split(' ') #将每行按照空格分开
c_dict[c_frag[0]] = ' '.join(c_frag[1:]) #赋值key和value
paper_df=pd.DataFrame(dict_list) #将txt转为DataFrame格式的文件,之后可以重命名文件的列名
paper_df.rename({'o': 'Affiliation',
'%': 'Reference',
'*': 'Title',
'@': 'Authors',
'c': 'Journal',
't': 'Year',
'index':'Index'},axis=1,inplace=True)
以上是基本的txt操作,现实生活中也会碰到txt内容混乱的情况,这个时候我们可以通过正则表达式去提取想要的信息,若是以后处理这样的数据,我会及时更新哒~