1.按时间区分脚本
数据样式:
阿尔法|@|手动阀|@|啊发生的|@|的说法|@|撒地方|@|撒地方|@|士大夫大师傅|@|法国德国|@|地方都是|@|分割|@|对方是个|@|当时法国代购|@|的风格|@|对方的|@|2023/01/01|@|上帝发誓|@|打法,上面代表一笔数据,假设有1000条数据,遍历每行,取第14个"|@|"后面的时间进行比较。输入区间时间,利于左开右闭规则,得到在这个区间内符合规则的数据,输出到一个以区间时间命名的csv中
from datetime import datetime
import os
# 定义时间范围
start_date = datetime.strptime('20230101', '%Y%m%d')
end_date = datetime.strptime('20230501', '%Y%m%d')
# 指定输出文件夹
output_folder = 'output_folder'
# 确保输出文件夹存在,如果不存在则创建
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 生成 CSV 文件名
output_file_name = f"{output_folder}/{start_date.strftime('%Y%m%d')}_{end_date.strftime('%Y%m%d')}.csv"
# 读取数据文件并进行处理
with open('input_data.txt', 'r') as input_file, open(output_file_name, 'w') as output_file:
for line in input_file:
cleaned_line = line.strip()
# 检查是否为空行
if cleaned_line:
fields = cleaned_line.split('|@|')
if len(fields) >= 14:
date_str = fields[13].strip()
try:
data_date = datetime.strptime(date_str, '%Y/%m/%d')
if start_date < data_date <= end_date:
output_file.write('|@|'.join(fields) + '\n')
except ValueError:
pass
2.按场景区别脚本
数据样式
假设有批量数据.csv,一行是一条数据,每条数据有22个值,每个值用|@|隔开,例如:法大师傅|@|撒地方|@|范德萨|@|等等,
第一行第一个字段值是'法大师傅",批量数据一共涉及了10个场景,写一个函数,输入场景字段的值,就能分割出特定场景的数据.csv文件
import csv
import os
def filter_csv_by_scene(csv_file, scene_field_index, target_scene, output_folder):
with open(csv_file, 'r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
filtered_rows = []
for row in reader:
if len(row) > scene_field_index:
scene_values = row[scene_field_index].split('|@|')
if target_scene in scene_values:
filtered_rows.append(row)
# 确定输出文件的路径和文件名
output_file_path = os.path.join(output_folder, f"{target_scene}.csv")
# 将筛选后的数据写入文件
with open(output_file_path, 'w', newline='', encoding='utf-8') as output_file:
writer = csv.writer(output_file)
writer.writerows(filtered_rows)
示例用法
filter_csv_by_scene('批量数据.csv', 0, '特定场景', '输出文件夹') # 假设场景字段在第一列,索引为0;指定特定场景为 '特定场景';将结果写入指定的输出文件夹中,文件名为 '特定场景.csv'
2.1带标题行的
import csv
def filter_csv_by_scene(csv_file, scene_field_index, target_scene):
with open(csv_file, 'r', newline='') as file:
reader = csv.reader(file)
header = next(reader) # 获取标题行
filtered_rows = []
for row in reader:
if len(row) > scene_field_index:
scene_values = row[scene_field_index].split('|@|')
if target_scene in scene_values:
filtered_rows.append(row)
# 将筛选后的数据写入文件
output_file = open(f'{target_scene}.csv', 'w', newline='')
writer = csv.writer(output_file)
writer.writerow(header) # 写入标题行
writer.writerows(filtered_rows)
output_file.close()
示例用法
filter_csv_by_scene('批量数据.csv', 0, '特定场景') # 假设场景字段在第一列,索引为0;指定特定场景为 '特定场景'.
2.2 不带标题行
数据样式:
阿尔法|@|手动阀|@|啊发生的|@|的说法|@|撒地方|@|撒地方|@|士大夫大师傅|@|法国德国|@|地方都是|@|分割|@|对方是个|@|当时法国代购|@|的风格|@|对方的|@|2023/01/01|@|上帝发誓|@|打法,假设有批量数据.csv,一行是一条数据,每条数据有多个值,每个值用|@|隔开,例如:法大师傅|@|撒地方|@|范德萨|@|等等,
第一行第一个字段值是'法大师傅",批量数据一共涉及了两个部门,多个场景,写一个函数,输入特定部门里面多个部门的值,就能分割出特定场景的数据.csv文件.
import csv
def split_data(scene_list, input_file, output_file):
with open(input_file, 'r', encoding='utf-8') as file:
reader = csv.reader(file)
with open(output_file, 'w', newline='', encoding='utf-8') as output:
writer = csv.writer(output)
for row in reader:
if row[0].split('|@|')[0] in scene_list: # 假设场景字段在第一列(索引为0)
writer.writerow(row) # 写入符合条件的行
print(f"已将特定场景数据分割到文件'{output_file}'中。")
```
### 使用示例
scene_list = ['特定场景1', '特定场景2', '特定场景3'] # 手动输入的场景列表
split_data(scene_list, '批量数据.csv', '特定场景数据.csv')
【拓展】
"\n"是换行符的转义字符,在文本中表示换行。它通常出现在计算机程序代码或电子邮件中,用于在不同行之间分隔内容。
在不同的操作系统中,换行的表示方式可能略有不同,Unix/Linux系统通常使用"\n"表示换行,而Windows系统使用"\r\n"表示换行。
2.3 分割脚本
假设有99.1万条数据的.csv,每一万条数据一分割,生成n个txt,类似分割表#100#1.txt,分割表#100#2.txt,分割表#100#3.txt,分割表#100#4.txt这样的文件命名,再给定一行表头内容,在每个分割表的首行添加该表头,
因为每条数据长度都是不一样的,尽量不要用pd.read_csv方法,只需要做按数据条数分割文件,然后把表头加到每个分割文件的第一行即可.
import os
def split_csv_to_txt(input_csv, output_dir, chunk_size, header):
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
# 打开输入文件
with open(input_csv, 'r', encoding='utf-8-sig') as infile:
data = infile.readlines()
# 计算总行数
total_rows = len(data)
# 计算分割表的总数
tables_count = (total_rows // chunk_size) + 1
# 按每一万条数据分割CSV并生成TXT文件
for i in range(0, total_rows, chunk_size):
# 计算分割表的编号
table_number = i // (total_rows // tables_count) + 1
# 构建TXT文件名
txt_file_name = f'分割表#{table_number}#{i + 1}.txt'
txt_file_path = os.path.join(output_dir, txt_file_name)
# 在每个文件的首行添加表头
with open(txt_file_path, 'w', encoding='utf-8') as txt_file:
txt_file.write(header + '\n')
# 写入分割的数据
txt_file.writelines(data[i:i + chunk_size])
print('分割和处理完成。')
使用方法示例:
csv_file_path = 'your_file.csv' # 替换为你的CSV文件路径
output_directory = 'output_txt_files' # 替换为输出目录
chunk_size = 10000 # 替换为每个TXT文件拆分的数据量
header = 'your_header' # 替换为你的表头内容
split_csv_to_txt(csv_file_path, output_directory, chunk_size, header)