目录
# 打开一个新的文件,如果文件不存在,将创建一个新的文件
with open("output.txt", "w") as file:
# 写入内容
file.write("这是一个示例输出。\n")
# 追加内容到已有文件
with open("output.txt", "a") as file:
file.write("这是追加的内容。\n")
# 将print函数的输出保存到文件
with open("output.txt", "w") as file:
print("这是通过print函数输出的内容。", file=file)
1、操作步骤
(1)打开文件读取整个文件
函数open返回一个表示文件的对象,对象存储在infile中。关键字with在不需要访问文件时将其自动关闭。读取出的内容以字符串形式保存在data1/data2里
(2)第一种:读取所有行 infile.readlines()
(3)第二种:每行分开读取 for循环 line.strip("\n").split()
(4)第三种:每个字符分开读取 for循环-for循环
(5)读取文本文件时,python将其中的所有文本都解读为字符串str。如果读取的是数字,并要将其作为数值使用,就必须使用函数int()将其转化为整数。或使用float()将其转换为浮点数。
2、代码实现
def read_txt(inputpath, outputpath):
with open(outputpath, 'w', encoding='utf-8') as file:
with open(inputpath, 'r', encoding='utf-8') as infile:
# 第一种:读取所有行
#data1 = infile.readlines()
#print(data1)
# 输出:['1 2 3 4 5\n', '6 7 8 9 10']
# 第二种:每行分开读取
data2 = []
for line in infile:
data_line = line.strip("\n").split() # 去除首尾换行符,并按空格划分
print(data_line)
data2.append([int(i) for i in data_line])
print(data2)
# 输出:[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
# 第三种:每个字符分开读取
data = data2
for i in range(len(data2)):
for j in range(len(data2[i])):
data[i][j] = str(data2[i][j])
print(data)
# 输出:[['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10']]
# 写入方法
for line in data2:
# data = '' + '\t'.join(str(i) for i in line) + '\n' # 用\t隔开
data = '' + ' '.join(str(i) for i in line) + '\n' # 用空格隔开
file.write(data)
if __name__ == "__main__":
input_path = '1.txt'
output_path = '2.txt'
read_txt(input_path, output_path)
如果有报错
改为绝对路径即可注意符号是 /
路径问题
' '是相对调用(在当前目录寻找文件名)
" "是绝对调用,要写入绝对路径
函数说明
spilt()函数实际上就是读取到什么就按照那个作为下一个分割的信号
strip()用来除掉首尾需要的字符
.3 数据处理
比如说txt里有,
可以直接用记事本打开用空格替换所有,即可
然后使用.spilt即可
.4 python分行读取带字符串的数字
读取以下的txt
代码:
'''把发布的消息转换为角度这样可以直接copy进列表'''
import re
file_path='/home/pxing/codes/realsense_ws/src/realsense-ros/scripts/Assembling/joint.txt'
with open(file_path, 'r') as f:
list=[]
lines=f.readlines()
for line in lines:
line=re.findall(r"\d+\.?\d*",line)
a=float(line[0])
list.append(a)
#print(list)
for i in range(int((len(list)+1)/6)):
#print(i)
print(list[6*i:6*i+6])
效果:
.5 对比数据
# 读取文件数据并将其转换为浮点数列表
def read_data(file_name):
with open(file_name, 'r') as file:
data = file.read().split()
return [float(x) for x in data]
# 计算两个列表之间的差异并返回一个新列表
def calculate_difference(list1, list2):
return [abs(a - b) for a, b in zip(list1, list2)]
# 将结果写入新的txt文件
def write_data(file_name, data):
with open(file_name, 'w') as file:
for i, value in enumerate(data):
file.write(f'{value:.4f} ')
if (i + 1) % 14 == 0: # 每14个值换一行
file.write('\n')
# 主程序
def main():
file1_data = read_data('/home/tencent_go/code/trxv3_tactile/robot_control1/output_gymnasium.txt')
file2_data = read_data('/home/tencent_go/code/trxv3_tactile/robot_control1/small_repo_version.txt')
difference = calculate_difference(file1_data, file2_data)
write_data('difference.txt', difference)
# 执行主程序
if __name__ == '__main__':
main()