1、覆盖输入,
import os
f=open("/root/d.txt","w+") #打开目标文件,w+是以读写方式打开,同r+
f.write("effortsing") #写入内容
f.close() #关闭文件
2、追加输入,用with方式,就不用写f.close(),会自动关闭
with open("/root/d.txt","a") as f:
f.write(info)
3、批量追加文件
# -*- coding:UTF-8 -*-
import subprocess
import sys
import os
my_cnf='''
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
#不区分大小写 (sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 这个简单来说就是sql语句是否严格)
lower_case_table_names = 1
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid
'''
with open("/root/h.txt","a") as f:
f.write(my_cnf)
f.close()
4、追加多行文字操作
with open('test3.txt','a+') as f:
text=['[text]' + os.linesep,'hello' + os.linesep,'127.0.0.1' + os.linesep]
f.writelines(text)
for line in f.readlines():
line.strip('\n')
5、清空文件
with open('test3.txt','r+') as f:
f.truncate()
6、文件第一行总是有空行问题:
用python往空文件里面追加几行文字后,再用readlines查看,总是显示第一行是空行。原因:是因为用 Linux下echo 情况文件导致的,echo 默认追加空行
7、读文件结果跟linux效果一样
with open('/etc/ansible/ansible.cfg','r+') as f:
for line in f:
print(line.strip())
8、用readline 一行行读文件结果跟linux效果一样 (建议用这个)
with open('/etc/ansible/ansible.cfg','r+') as f:
while True:
url=f.readline()
url=url.rstrip()
if url=='':
break
else:
print(url)
9、从一个文件读内容同时写到另一个文件
ms=open("/root/.bash_history")
for line in ms.readlines():
with open('/backup/history.txt','a+') as mon:
mon.write(line)
ms.close()
10、对文件内容查找替换
如果想要修改文件中的某一行或者某一个位置的内容,在python中是没有办法直接实现的,只能先把文件所有的内容全部读取出来,然后进行匹配修改后写入到新的文件中。
特别注意:被替换的文件必须是 python文件,
例如想要把python文件中的变量替换为真实的值需要进行如下操作:
查看原文件内容:
注意:TOKEN不能写成$TOKEN,否则查看文件会变成空格
cat > /k8s/profile/token.py << EOF
TOKEN,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
定义变量
In [7]: output=subprocess.check_output(["head -c 16 /dev/urandom | od -An -t x | tr -d ' '"], shell=True)
In [9]: token=str(output.decode('utf8').strip()).strip('b')
In [10]: print(token)
d3f4e95e05dfe34ea87217a55fb75bac
开始替换
In [3]: os.chdir('/etc/kubernetes/')
In [4]: if os.path.exists('token.csv'):
...: os.remove('token.csv')
In [56]: f = open('/k8s/profile/token.py','r',encoding='utf-8')
In [57]: f_new = open('/etc/kubernetes/token.csv','w',encoding='utf-8')
In [58]: for line in f:
...: if "TOKEN" in line:
...: line = line.replace('TOKEN',token)
...: f_new.write(line)
...: f.close()
...: f_new.close()
查看结果:
cat /k8s/profile/token.py
d3f4e95e05dfe34ea87217a55fb75bac,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
参照文档:
https://www.cnblogs.com/yujihaia/p/7468235.html
https://www.cnblogs.com/hoffman-of-programe/p/8361974.html