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

 

posted @ 2018-11-19 11:15  effortsing  阅读(216)  评论(0编辑  收藏  举报