文章目录

  • 1. 读取txt文本内容
  • 1.1 read()
  • 1.2 readline()
  • 1.3 readlines()
  • 2. 写入txt文本
  • 2.1 读写模式
  • 2.2 读取txt文件的若干行写入另一个txt
  • 3. 其他使用
  • 3.1 删掉指定字符前/后的内容
  • 3.2 csv文件存为txt
  • 3.3 numpy读写txt
  • 3.3.1 np.savetxt()
  • 3.3.2 np.loadtxt()


1. 读取txt文本内容

python常用的读取文件函数有三种read()、readline()、readlines()

1.1 read()

read()一次性读取文本中全部的内容,以字符串的形式返回结果.

with open('test.txt', 'r') as f:  # 打开文件
    data = f.read()  # 读取文件
    print(data)

1.2 readline()

readline() 只读取文本第一行的内容,以字符串的形式返回结果.

with open('test.txt', 'r') as f:
    data = f.readline()
    print(data)

1.3 readlines()

readlines() 读取文本所有内容,并且以列表的格式返回结果,一般配合for in使用.

with open('test.txt', 'r') as f:
    data = f.readlines()
    print(data)

readlines会读到换行符,可用如下方法去除:

with open('test.txt', 'r') as f:
    for line in f.readlines():
        line = line.strip('\n')  #去掉列表中每一个元素的换行符
        print(line)

2. 写入txt文本

with open('test.txt','w') as f:
    f.write("写入文件测试!")  # 自带文件关闭功能,不需要再写f.close()

2.1 读写模式

要了解文件读写模式,需要了解几种模式的区别,以及对应指针

  • r : 读取文件,若文件不存在则会报错
  • w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件
  • a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾
  • rb,wb: 分别于r,w类似,但是用于读写二进制文件
  • r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖
  • w+ : 可读,可写,文件不存在先创建,会覆盖
  • a+ : 可读、可写,文件不存在先创建,不会覆盖,追加在末尾

2.2 读取txt文件的若干行写入另一个txt

方法一:

file_1 = './data/1.txt'
file_2 = './data/2.txt'

with open(file_1, 'rb') as fp1:
    with open(file_2, 'ab') as fp2:
        for i in range(100):
            line_data = fp1.readline()
            fp2.write(line_data)

方法二:

file_1 = './data/1.txt'
file_2 = './data/2.txt'

fp_1 = open(file_1, 'rb')
fp_2 = open(file_2, 'ab')
 
line_id = 0
while True:
    line_data = fp_1.readline()
    # print('line_data:', line_data)
    line_id = line_id + 1
    
    if line_id>=1 and line_id<=100:
        print('line_id:', line_id)
        fp_2.write(line_data)
    else:
        break
        
fp_1.close() # 文件关闭, 若不关闭可能会导致部分写入数据丢失
fp_2.close() # 文件关闭, 若不关闭可能会导致部分写入数据丢失

3. 其他使用

3.1 删掉指定字符前/后的内容

如下所示, 我们想删除右括号 ] 左边的内容, 得到 Today is Wednesday

line_data = '2021-09-01 [] Today is Wednesday'
head, sep, tail = line_data.partition('] ')
print(tail)

输出结果如下所示:

Today is Wednesday

3.2 csv文件存为txt

使用df.to_csv()不仅可以存储CSV文件, 还可以存储TXT文件:

import pandas as pd

df = pd.read_csv('./data/test.csv', header=None)
df.to_csv('./data/test.txt', sep=' ', header=None, index=None) # sep=' ' 分隔符为空格

3.3 numpy读写txt

3.3.1 np.savetxt()

numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)[source]
  • fname:表示要保存文件的地址,可以自己建文件名,如‘test.txt’
  • X:表示要保存的文件
  • fmt:控制数据存储的格式
  • delimiter :分隔符,默认空格,也可以用逗号等
  • newline:表示换行的时候用什么,默认\n,表示换一行,也可以用\t,则表示空四格
  • header:表示头文件,如“test_data"
  • footer: 文件下的脚注
  • comment:注释,默认是#,因为python的注释是#,也可以用其它符号

样例代码如下:

import numpy as np 
#生成数据 
x = y = z = np.ones((2,3)) 
x 
>>> array([[1., 1., 1.], 
       [1., 1., 1.]]) 
        
#保存数据 
np.savetxt('test.out', x) 
np.savetxt('test1.out', x, fmt='%d') 
np.savetxt('test2.out', x, delimiter=',') 
np.savetxt('test3.out', x, newline='a') 
np.savetxt('test4.out', x, delimiter=',',newline='a') 
np.savetxt('test5.out', x, delimiter=',',header='abc') 
np.savetxt('test6.out', x, delimiter=',',footer='abc')

3.3.2 np.loadtxt()

numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes')
  • fname:文件名/文件路径,如果文件后缀是.gz或.bz2,文件将被解压,然后再载入
  • dtype:要读取的数据类型
  • comments:文件头部或者尾部字符串的开头字符,用于识别头部,尾部字符串
  • delimiter:划分读取上来值的字符串
  • converters:数据行之间的分隔符

样例代码如下:

np.loadtxt('test.out') 
np.loadtxt('test2.out', delimiter=',')