python操作文件
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