python 删除文件某一行
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time : 2020/6/29 15:06
# @Author : hyang
# @File : delLine.py
# @Software: PyCharm
import sys
import os
import random
import shutil
import string
def getLine_num(filename):
count = 0
for index, line in enumerate(open(filename, 'rb')):
count += 1
return count
def remove_Line(filename, del_line):
"""
删除文件某一行
:param filename:
:param del_line:
:return:
"""
# 打开旧文件
old_file = open(filename, "rb")
# 打开新文件
new_file = open("%s.new" % filename, "wb")
current_line = 0
# 定位到需要删除的行
while current_line < (del_line - 1):
current_line_cont = old_file.readline()
# 把每一行写入新文件
new_file.write(current_line_cont)
current_line += 1
# 当前光标在被删除行的行首,记录该位置
seek_point = old_file.tell()
# 设置光标位置
new_file.seek(seek_point, 0)
# 读需要删除的行,光标移到下一行行首
line_con = old_file.readline()
print("需要删除行: {}".format(line_con))
# 被删除行的下一行读给 next_line
next_line = old_file.readline()
# 连续覆盖剩余行,后面所有行上移一行
while next_line:
new_file.write(next_line)
next_line = old_file.readline()
# 文件关闭
old_file.close()
new_file.close()
# 文件备份与替换
bak_f = filename + ''.join(random.sample(string.digits, 6))
os.rename(filename, bak_f) # 备份旧文件
print("源文件备份为%s" % bak_f)
os.rename("%s.new" % filename, filename) # 把新文件名字改成原文件的名字,就把之前的覆盖掉了
# def main_arg():
# if len(v_arg) != 2:
# # print(platform.system())
# print_arg(v_arg)
# print_warn("---参数输入错误--")
# print_warn("delLine 文件名 删除行")
# else:
# f_name = v_arg[1].strip()
# line_no = v_arg[2].strip() # 删除行
# if not line_no.isdigit():
# print_error("行数必须为数字" )
# else:
# if not os.path.exists(f_name):
# print("%s文件不存在" % f_name)
# else:
# pass
def main():
f_name = 'F:\a/logs'
bak_f = f_name + ''.join(random.sample(string.digits, 6))
line_no = '2'
line_no = int(line_no)
line_num = getLine_num(f_name) # 获得文件总行数
if line_no > line_num:
print("行数大于文件行数 " + line_num)
else:
print("文件总行数={},删除第{}行" .format(line_num, line_no))
remove_Line(f_name, line_no)
if __name__ == '__main__':
# 获得系统参数
# v_arg = sys.argv
# main_arg()
# init(autoreset=True) # 初始化,并且设置颜色设置自动恢复
main()
# print_color(Style.RESET_ALL) # 还原默认颜色