基于time模块和python的文件信息查看
我们想通过python代码实现一个文件的各项时间类信息的查看,那么代码实现过程如下:
# 导入时间模块
import time
# 导入操作系统模块
import os
# 将时间戳转化时间中文格式
def timestamptostring(timestamp):
# 将时间戳转化为本地的时间戳
vtime = time.localtime(timestamp)
# 将时间戳格式化为中文时间格式
vdatetime = time.strftime('%Y-%m-%d %H:%M:%S', vtime)
return vdatetime
# 将字节数转化以M为单位的计量
def bytetoM(size):
vsize = size / float(1024 * 1024)
return round(vsize, 2)
# 主函数main
if __name__ == '__main__':
# 获取当前.py文件的绝对路径
current_file_path = os.path.abspath(__file__)
# 获取当前.py文件所在的目录
current_dir = os.path.dirname(current_file_path)
# 构建新路径。这里将“2_test_count.txt”文件假定放在了和当前.py文件同一个目录下
target_file_path = os.path.join(current_dir, "2_test_count.txt")
# 通过os.stat()函数取得文件的信息
fileinfo = os.stat(target_file_path)
# print(type(fileinfo),fileinfo)
print("2_test_count.txt:")
print('文件建立时间:', timestamptostring(fileinfo.st_ctime))
print('文件的大小:', bytetoM(fileinfo.st_size), 'M')
print('文件修改时间:', timestamptostring(fileinfo.st_mtime))
print('文件访问时间:', timestamptostring(fileinfo.st_atime))
以上代码可以实现该.py文件同目录中的一个txt文件信息的查看,如果想要查看其它文件,修改相应路径即可。代码运行结果展示:
2_test_count.txt:
文件建立时间: 2023-08-28 16:29:24
文件的大小: 0.0 M
文件修改时间: 2020-07-20 08:29:44
文件访问时间: 2024-03-30 12:16:08
统计文件中的高频词
我们对一个txt的文件进行词频统计,并输出前六个出现次数最多的词。
代码如下:
# 导入正则模块库
import re
# 定义一个类
class counter_word:
# 初始化
def __init__(self, file_name):
# 设置要统计单词的文件名
self.filename = file_name
# 初始一个字典,用来保存各单词出现的次数,形{'word1': 17, 'word2': 7...}
self.dict_count = {}
# 定义一个统计函数
def count_word(self):
# 以读的方式打开一文本文件
with open(self.filename, 'r') as f:
# 循环读文件每一行,防止文件过大
for line in f:
# 每次清空列表变量words,这个变量将文件中每行的单词依次加入进来
words = []
# 用列表生成式把每行的各个单词加入进来.
# 查找字符串line中所有的"单词"。这里的"单词"被定义为由连续的字母、数字和下划线组成的序列。
words = [s.lower() for s in re.findall("\w+", line)]
# print(words)
# 通过循环统计单词的个数
for word in words:
# 采用累加法计算单词出现的个数
# self.dict_count[word]是以单词名名的字典键m ,
# self.dict_count.get(word, 0) + 1表示每发现一次将以该单词为键名的键值加1
self.dict_count[word] = self.dict_count.get(word, 0) + 1
# 取出现次数前num名的单词
def top_number(self, num):
# 通过sorted()对字典进行排序,排序按键值大小排(key=lambda item: item[1])
# 排序的方式是逆序reverse=True
# 并对排好序的字典进行切片,取前num个
return sorted(self.dict_count.items(), key=lambda item: item[1], reverse=True)[:num]
# 主程序main
if __name__ == '__main__':
# 生成couter_word实例对象
counter_obj = counter_word(".\\2_test_count.txt")
# 调用函数进行统计
counter_obj.count_word()
# 取出现次数最多的前6个单词
top_num_6 = counter_obj.top_number(6)
print('test_count.txt', '中出现次数前6的单词统计如下:')
# 通过循环打印出前出现次数最多的单词
for word in top_num_6:
print(word[0], '出现:', word[1], '次')
代码运行后的结果展示:
test_count.txt 中出现次数前6的单词统计如下:
you 出现: 33 次
to 出现: 19 次
the 出现: 10 次
who 出现: 10 次
those 出现: 9 次
have 出现: 8 次
re.findall(“\w+”, line)解析
在Python中,re.findall(pattern, string)函数是用来查找字符串中所有与正则表达式pattern匹配的所有子串,返回它们作为一个列表。如果pattern中没有组,findall将返回一个匹配项的列表,如果pattern中有组,它将返回一个包含所有匹配项的元组的列表。
正则表达式中的\w是一个特殊的字符类,匹配任何单词字符,等价于[a-zA-Z0-9_],其中包括所有的字母和数字以及下划线。+是一个量词,匹配它前面的字符一次或多次。
因此,re.findall(“\w+”, line)的含义是:查找字符串line中所有的"单词"。这里的"单词"被定义为由连续的字母、数字和下划线组成的序列。
例如:
import re
line = "The quick brown fox jumps over 12 lazy dogs."
words = re.findall("\w+", line)
print(words)
# 输出内容:
['The', 'quick', 'brown', 'fox', 'jumps', 'over', '12', 'lazy', 'dogs']
self.dict_count[word] = self.dict_count.get(word, 0) + 1解析
self.dict_count:这是一个字典),用于存储每个单词及其出现次数。字典的键是单词,值是对应的出现次数。
word:假设是一个字符串变量,表示要统计次数的单词。
.get(word, 0):这是dict类型的一个方法。它尝试获取字典中word键对应的值。如果word在字典中不存在,它会返回0。第二个参数(这里是0)是一个默认值,用于当键不存在于字典时返回。
self.dict_count.get(word, 0) + 1:首先使用.get()方法获取word的当前计数,然后将这个计数加1。如果word是新出现的,.get()将返回0,然后加1,意味着其开始计数为1。如果word已经在字典中,就获取其当前的计数值,然后加1来更新计数。
self.dict_count[word] = …:这是一个字典赋值操作。它会更新字典self.dict_count,将word的出现次数设置为新计算的值。