python的几个关于文本文件的demo脚本

 部分来自WeTab AI PRO

1.在文末添加一行文字

def add_endline(filename, texts):  # 文本末尾增加一行
    with open(filename, 'a') as file:
        file.write(f'\n{texts}')
        file.close()

当使用 open() 函数打开文件时,第二个参数指定了文件的打开模式。常见的文件打开模式包括:

  • 'r':读取模式(默认)。打开文件用于读取。如果文件不存在,抛出异常。
  • 'w':写入模式。打开文件用于写入。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。
  • 'a':追加模式。打开文件用于写入,在文件末尾追加内容。如果文件不存在,则创建新文件。
  • 'r+':读写模式。打开文件用于读取和写入。
  • 'b':二进制模式。与上述模式结合使用,用于处理二进制文件,如图片或视频文件。

这些模式可以单独使用,也可以与其他模式组合使用,例如 'rb' 表示以二进制模式读取文件。根据你的需求选择适当的模式来打开文件。

 2.读取文本的最后几行

def read_lastlines(filename, n):
    with open(filename, 'r') as file:
        lines = file.readlines()   # 读取到的行,格式是一个列表,每一行文字是列表的一个元素
        return lines[-n:]

# 输出:['2#湿板抛废检测辊周长:250.0\n', '1#干板抛废检测辊周长:250.0\n', '2#干板抛废检测辊周长:250.0']

 注意,readlines()的返回值是一个列表,文本文件的每一行字符是列表的一个元素。除最后一行外,别的行都是以\n(换行符)结尾的。因此,如果进一步需要获取每一行的文字,需要用到strip()将换行符去掉

demo


filename = "example.txt"
texts = """
    lin1
    lin2
    lin3
    lin4
    lin5
    lin6
"""

with open(filename, 'w') as file:
    file.write(texts)
    file.close()


def read_lastlines(file_name, n):
    with open(file_name, 'r') as f:
        lines = f.readlines()
        return lines[-n:]


last_lines = read_lastlines(filename, 3)
for line in last_lines:
    print(line)
    # print(line.strip())

上面的方法使用了readlines() 函数,缺点是需要将整个文件全部加载读取,当文件比较大时效率比较低。下面的代码使用内置的文件处理功能和collections.deque。这样可以高效地处理大文件,因为不需要读取整个文件到内存中。

collections.deque函数的详解:【Python】详解 collections.deque-CSDN博客

下面是一个实用中的示例代码,展示了如何实现这个功能:

import collections

filename = "example.txt"
texts = """
    this line1
    this line2
    this line3
    this line4
    this line5
    this line6
"""

with open(filename, 'w') as file:
    file.write(texts)
    file.close()

def read_lastlines(filename, n):
    with open(filename, 'r') as file:
        deque_lines = collections.deque(file, maxlen=n)   # 使用deque(队列),设置最大长度为n
        out_lines = [[line.strip('\n')] for line in list(deque_lines)]  # 去掉换行符
        return out_lines

# 调用函数
n = 5  # 你想读取的行数
filename = 'example.txt'  # 你的文件名
last_n_lines = read_lastlines(filename, n)

print(last_n_lines)

# 输出:[['    this line2'], ['    this line3'], ['    this line4'], ['    this line5'], ['    this line6']]

 这个脚本将文本的最后几行读出后,去掉换行符,并且输出为一个列表

3.读取CSV表格的最后几行

下面是一个实用中的示例代码,功能是从一个CSV表格中读取最后几行并展示,这是一个很庞大的生产记录表,如果读取全部的行就很效率低下,使用了队列之后就很高效:

import os
import collections
import sys

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem


def read_lastlines(filename, n):
    with open(filename, 'r') as file:
        deque_lines = collections.deque(file, maxlen=n)  # 使用deque(队列),设置最大长度为n
        out_lines = [[line.strip('\n')] for line in list(deque_lines)]
        return out_lines


def load_csv(table_widget, file_path, n, top_row):  # top_row是置顶行的内容,一般为表格标题和列名称
    lines = read_lastlines(file_path, n)
    line_list = [line[0].split(',') for line in lines]
    line_list.insert(0, top_row[1])
    line_list.insert(0, top_row[0])
    # print(line_list)

    table_widget.setRowCount(len(line_list))
    table_widget.setColumnCount(len(line_list[0]))

    for row in range(len(line_list)):
        for column in range(len(line_list[row])):
            item = QTableWidgetItem(line_list[row][column])
            # print(line_list[row][column])
            item.setFlags(item.flags() ^ Qt.ItemIsEditable)  # 禁止编辑
            font = QFont()
            font.setFamily("Arial")  # 设置字体
            font.setPointSize(16)  # 设置字号
            item.setFont(font)

            table_widget.setItem(row, column, item)
        table_widget.resizeColumnsToContents()  # 自动调整列宽


def main():
    app = QApplication(sys.argv)

    window = QMainWindow()
    window.resize(800, 600)
    window.setWindowTitle("PyQt5 QMainWindow Example")

    window.table_csv = QTableWidget(window)  # 为表格创建显示table
    window.table_csv.verticalHeader().setVisible(False)  # 隐藏行号
    window.table_csv.horizontalHeader().setVisible(False)  # 隐藏列号
    top_row = [[" ", " ", " ", " ", "生产统计记录表 ", " ", " ", " ", " ", " "],
               ["起始时间", "结束时间", "生产线", " 总产量(米)", "湿板抛废(米)", "干板抛废(米)",
                "总成品率(%)",
                " 总废品率(%)", "湿板废品率(%)",
                "干板废品率(%)"]]  # 表格的表头和首行内容

    file_path = 'history.csv'
    if not os.path.isfile(file_path):  # 文件不存在,创建文件
        with open(file_path, 'w') as file:  # 写方式打开文件
            file.write("新建的表格")  # 创建一个空文件或可以添加一些初始文本

    load_csv(window.table_csv, file_path, 5,
             top_row)  # 加载和显示csv
    window.setCentralWidget(window.table_csv)
    window.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

4.判断一个文本文件是否存在,不存在就创建并写入初始化内容

可以用来进行系统的初始化参数设置

def txtFile_isExist(file_path, txt='', code='utf-8'):
    if not os.path.isfile(file_path):  # 文件不存在,创建文件
        with open(file_path, 'w', encoding=code) as file:  # 写方式打开文件
            file.write(txt)

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝海拓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值