掌握csvkit:高效的CSV文件处理工具包

需积分: 9 0 下载量 176 浏览量 更新于2024-12-19 收藏 970KB ZIP 举报
资源摘要信息:"csvkit_talk:谈谈 csvkit" csvkit是一个强大的工具集,它提供了多种命令行工具,用于处理CSV(逗号分隔值)文件。CSV是一种常见的文本文件格式,用于存储表格数据,包括数字和文本。csvkit能够帮助用户在命令行环境中更高效地操作和分析CSV数据,无需依赖复杂的数据库软件或图形界面程序。 1. 格式化CSV文件输出: csvkit能够将CSV文件在命令行中格式化输出为易于阅读的表格形式。这意味着用户可以直观地查看数据,而无需将数据导入到电子表格软件或数据库中。 2. 检查CSV文件中的数据完整性: 使用csvkit可以检查CSV文件中的缺失值、最小值、最大值、平均值和众数等统计数据。这些检查对于数据清洗和验证至关重要,尤其是在数据预处理阶段。 3. 转换文件格式: csvkit具备将其他非CSV格式的文件转换为CSV格式的能力,同时也能够将CSV文件转换成其他格式,例如JSON、SQL等。这一功能对于需要在不同系统间迁移数据的场景非常有用。 4. 堆叠CSV文件: csvkit允许用户将多个CSV文件堆叠成一个单一的文件,这对于整理来自不同来源的多个数据集非常方便。用户可以轻松合并数据集,进行进一步的分析和处理。 5. 过滤和选择数据: csvkit的工具集可以基于过滤条件来选择CSV文件的特定列或行。这提供了一种灵活的数据筛选方式,用户可以根据需要快速提取数据子集。 6. 将CSV文件视为数据库表: csvsql是csvkit工具集中的一个工具,它允许用户像对待数据库表一样对待CSV文件,并允许用户使用SQL语句来查询数据。这意味着用户可以利用强大的SQL查询语言来分析和检索CSV中的数据,而无需设置数据库系统。 7. 示例和实践: csvkit_talk存储库包含大量的示例和带有数据的CSV文件,这些资源为用户提供了一个实际操作的场景。用户可以通过这些示例来学习如何运用csvkit的各种工具,并对csvkit工具进行测试,以加深理解和记忆。 8. 技术前提条件: 要想充分利用csvkit工具集,用户需要具备一定的技术背景。首先,系统中需要安装csvkit工具。其次,用户需要熟悉常用的bash命令行工具,如ls、cat、less、head等,这些工具可以帮助用户浏览文件系统和查看文件内容。 标签中的“HTML”可能是指在技术社区或文档中分享csvkit使用经验时所采用的格式,如使用HTML编写教程或文档以便于在线阅读和交互。 文件压缩包"csvkit_talk-master"可能包含了该存储库的源代码和示例数据,便于用户下载和在本地环境中安装和运行csvkit工具集,以及按照示例进行操作和学习。

import os import re from bs4 import BeautifulSoup # 设置html文件路径 folder_path = r'C:\Users\test\Desktop\DIDItest' # 提取html文件内所需要数据 def extract_html_info(file_path): with open(file_path, 'r', encoding='utf-8') as file: # 读取HTML源代码 html = file.read() soup = BeautifulSoup(html, 'html.parser') # 提取所有的

标签 p_tags = soup.find_all('p') for p_tag in p_tags: # 提取ID talk_id = p_tag.find_previous(string=lambda text: isinstance(text, str) and '[talkid:' in text) talk_id = talk_id.strip('[talkid:]') # 提取时间 timestamp = p_tag.find_previous('body').find_previous('head').find('meta', {'http-equiv': 'Content=-Type'})[ 'content'] # 提取发送号码 send_number = p_tag.find('span', {'class': 'hint-success'}).text # 提取接收号码 receive_number = p_tag.find_all('span', {'class': 'hint-success'})[1].text # 提取信息内容 message = p_tag.previous_sibling.strip() # 遍历文件夹及子文件夹,提取HTML文件信息 for root, dirs, files in os.walk(folder_path): for file in files: if file.endswith('.html'): file_path = os.path.join(root, file) extract_html_info(file_path) # 判断是否是音频 if '音频' in message: file_url = p_tag.find('a')['href'] print( f"ID: {talk_id}, 时间: {timestamp}, 发送号码: {send_number}, 接收号码: {receive_number}, 音频文件地址: {file_url}") else: print( f"ID: {talk_id}, 时间: {timestamp}, 发送号码: {send_number}, 接收号码: {receive_number}, 信息内容: {message}")

2023-07-14 上传

import os from bs4 import BeautifulSoup import re # 指定文件夹路径 folder_path = "C:/Users/test/Desktop/DIDItest" # 正则表达式模式 pattern = r'<body>(.*?)<\/body>' # 遍历文件夹中的所有文件 for root, dirs, files in os.walk(folder_path): for file in files: # 读取html文件 file_path = os.path.join(root, file) with open(file_path, "r", encoding="utf-8") as f: html_code = f.read() # 使用正则表达式匹配<body>标签内的数据 body_data = re.findall(pattern, html_code, re.DOTALL) # 剔除

和()

body_data = body_data[0].replace("

", "").replace("()

", "") # 使用正则表达式提取talk_id、时间、发送者ID和接收者ID matches = re.findall(r'\[talkid:(\d+)\](\d+年\d+月\d+日 \d+:\d+:\d+).*?<span.*?>(\d+)<.*?>(.*?)<', body_data) # 提取唯一ID,时间,发送号码和私聊群聊关键词 matches1 = re.findall(r'<span.*?hint-success.*?>(\d+)<.*?>', body_data) # match = re.search('(中发言|发送)\s(.*?)\s', body_data) # if match: # content = match.group(2) matches2 = re.findall('(中发言|发送)\s(.*?)\s', body_data) for match in matches2: content = match[1] soup = BeautifulSoup(content, 'html.parser') if soup.find('
= 2: receive_id = matches1[3] # 处理匹配结果 for match in matches: talk_id = match[0] time = match[1] send_id = match[2] talk_type = match[3] # 进行时间格式转换,将time转换为"0000-00-00"格式 time = time.replace('年', '-').replace('月', '-').replace('日', '') talk_type = talk_type.replace('向', '私聊').replace('在群', '群聊') # 打印结果 print("Talk ID:", talk_id) print("Time:", time) print("Sender ID:", send_id) print("Receive_id:", receive_id) print("Talk_type:", talk_type) print("Content:",content) print("---")导入至csv

2023-07-16 上传