You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

198 lines
15 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- coding: utf-8 -*-
# @Time : 2022/8/22 14:35
# @Author : ZAOXG
# @File : merge_table.py
import re
import os
import pandas as pd
import traceback
from pprint import pprint
import csv
from data_process_tool import read_data
from data_process_tool import write_data
def merge_table(path, file_list: list = None, to_type: str = 'xlsx', duplicates: list = None, on_columns: list = None, **kwargs):
"""
合并指定目录下的所有文件
"""
write_kwargs = {}
if kwargs.get('keep'):
write_kwargs['keep'] = kwargs.pop('keep', None)
if not file_list:
file_list = get_dirs_file(path, kwargs.pop('file_sort', False))
r: pd.DataFrame = pd.DataFrame()
for file in file_list:
if file.endswith(('.zip', '.7z')):
continue
try:
temp_t = read_data(os.path.join(path, file), **kwargs)
print('%s -> %s' % (file, temp_t.shape))
# temp_t['source'] = source
if on_columns and len(on_columns):
temp_t = temp_t[on_columns]
r = pd.concat([r, temp_t])
except Exception as e:
traceback.print_exc()
print(e)
print(file)
if duplicates:
r.drop_duplicates(subset=duplicates, inplace=True, **write_kwargs)
file_name = re.split(r'\\|/', path)[-1]
full_name = os.path.join(path, file_name)
write_data(r, full_name+f'.{to_type}', index=False)
return path, r.shape[0]
def get_dirs_file(file_dir, file_sort: bool = False):
all_files = []
for root, dirs, files in os.walk(file_dir):
if file_sort:
files.sort(key=lambda x: int(x.split('.')[0]))
for file in files:
all_files.append(os.path.join(root, file))
for dir_ in dirs:
full_dir = os.path.join(root, dir_)
file_list = os.listdir(full_dir)
if file_sort:
file_list.sort(key=lambda x: float(x.rsplit('.', maxsplit=2)[0]))
for file in file_list:
all_files.append(os.path.join(full_dir, file))
return all_files
def split_filename(path):
fileHead = {}
files = os.listdir(path)
for file in files:
filename, filetype = os.path.splitext(file)
head = re.split(r'\d', filename)[0]
fileHead.setdefault(head, []).append(
os.path.join(path, file)
)
return fileHead
def merge_file2(file_list: list, filename: str = None, to_type: str = 'xlsx'):
r: pd.DataFrame = pd.DataFrame()
for file in file_list:
if file.endswith(('.zip', '.7z')):
continue
try:
temp_t = read_data(file)
# temp_t['source'] = file
r = pd.concat([r, temp_t])
except Exception as e:
traceback.print_exc()
print(file)
write_data(r, filename + f'.{to_type}', index=False)
def merge_by_file_head():
OUT_PATH = 'Z:/temp-data/集成电路4.11-2/作者合并'
mm = split_filename('Z:/temp-data/集成电路4.11-2/重新下载文件')
for m1, m2 in mm.items():
merge_file2(m2, os.path.join(OUT_PATH, m1), to_type='csv')
def merge_csv_files(path):
file_name = re.split(r'\\|/', path)[-1]
full_name = os.path.join(path, file_name)
with open(full_name+'.csv', 'a', encoding='utf-8', newline='') as new_merge_file:
files = os.listdir(path)
for file in files:
print(file)
if file.endswith('.csv'):
file_path = os.path.join(path, file)
try:
with open(file_path, 'r', encoding='utf-8') as f:
new_merge_file.write(f.read())
except Exception as exception:
print(exception)
print('合并完成')
def merge_txt_files(path):
file_name = re.split(r'\\|/', path)[-1]
full_name = os.path.join(path, file_name)
has_header = False
with open(full_name+'.csv', 'ab') as new_merge_file:
files = os.listdir(path)
for file in files:
print(file)
if file.endswith('.txt'):
file_path = os.path.join(path, file)
try:
with open(file_path, 'rb') as f:
if not has_header:
head_line = f.readline()
new_merge_file.write(head_line)
while line_data := f.readline():
new_merge_file.write(line_data)
except Exception as exception:
print(exception)
print('合并完成')
def count_file_rows(path: str = None):
rows_count = 0
files_count = 0
files_info = {}
files = os.listdir(path)
for file in files:
file_path = os.path.join(path, file)
try:
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
rows_count += len(lines)
files_info[file] = len(lines)
except Exception as e:
files_info[file] = str(e)
files_count += 1
return {
'files_path': path,
'rows_count': rows_count,
'files_count': files_count,
'files_info': files_info,
'exclude_head': rows_count - files_count
}
if __name__ == '__main__':
# merge_table(fr'Y:\zhaoxiangpeng\BCR\2025BCR\API采集', encoding_errors='ignore', on_bad_lines='skip')
# merge_table(fr'Z:\文章摘要推荐池\toppaper核心数据\初始文章数据\2023-3月\Highly Cited Papers', on_columns=['EID'], encoding_errors='ignore', on_bad_lines='skip')
# merge_table(fr'Z:\文章摘要推荐池\toppaper核心数据\初始文章数据\2023-3月\Highly Cited Papers', encoding_errors='ignore', on_bad_lines='skip', engine='python', skiprows=1, skipfooter=2)
# merge_table(fr'Y:\wos-metadata\wos increment-202403\03', encoding_errors='ignore', on_bad_lines='skip', duplicates=['UT'], keep='last', file_sort=False)
# merge_table(fr'Y:\zhaoxiangpeng\2024BCR\API采集数据', encoding_errors='ignore', on_bad_lines='skip', to_type="txt")
merge_table(fr"Z:\客户数据存储\WOS\清华大学\OG=(Tsinghua University) AND (PY==(2024))", duplicates=['UT'], encoding_errors='ignore', on_bad_lines='skip', keep='last', file_sort=True)
# merge_table(fr"Y:\数据采集需求\wosid下载\incites教育部学科数据", duplicates=['入藏号'], keep='last', on_columns=['入藏号', 'DOI'], on_bad_lines='skip')
# merge_table(fr"F:\工作数据存储2025\20250101_中文发文引文更新\2024", duplicates=['网址'], keep='last', to_type='csv')
# merge_table(fr'Z:\客户数据存储\专利\中南大学\23~', to_type='csv')
# merge_table(fr'Y:\wos-metadata\SCHOOL\bj\待下载DOI', to_type='csv', duplicates=['DO'])
# merge_table(fr'F:\工作数据存储2023\20231221_北京师范大学\补充数据\EI', on_bad_lines='skip', on_columns=['Accession number'], duplicates=['Accession number'], to_type='xlsx') # duplicates=['Title', 'Accession number']
# merge_table(fr'Z:\文章摘要推荐池\toppaper核心数据\初始文章数据\2023-3月\Highly Cited Papers', encoding="ISO-8859-1", on_bad_lines='skip', engine='python', skiprows=1, skipfooter=2, duplicates=['Accession Number'], to_type='xlsx')
# merge_by_file_head()
# file_s = ['Z:/客户数据存储/TEMP\\电子科技大学\\电子科技大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西安建筑科技大学\\西安建筑科技大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\四川大学\\四川大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中山大学\\中山大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中国农业大学\\中国农业大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\江苏师范大学\\江苏师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中国人民大学\\中国人民大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\上海工程技术大学\\上海工程技术大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西安交通大学\\西安交通大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\首都师范大学\\首都师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西北工业大学\\西北工业大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\重庆交通大学\\重庆交通大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\清华大学\\清华大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\长安大学\\长安大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\三江学院\\三江学院2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\华东师范大学\\华东师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\福州大学\\福州大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\安徽医科大学\\安徽医科大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\扬州大学\\扬州大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\北京理工大学\\北京理工大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\兰州大学\\兰州大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\江汉大学\\江汉大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\上海电力大学\\上海电力大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\华东理工大学\\华东理工大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西安电子科技大学\\西安电子科技大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西北师范大学\\西北师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\上海财经大学\\上海财经大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\三峡大学\\三峡大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京中医药大学\\南京中医药大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\浙江大学\\浙江大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中南大学\\中南大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\同济大学\\同济大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中国科学技术大学\\中国科学技术大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中欧国际工商学院\\中欧国际工商学院2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\合肥工业大学\\合肥工业大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京航空航天大学\\南京航空航天大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京工程学院\\南京工程学院2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\江南大学\\江南大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\安徽建筑大学\\安徽建筑大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中南财经政法大学\\中南财经政法大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\河南师范大学\\河南师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\曲阜师范大学\\曲阜师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京农业大学\\南京农业大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京林业大学\\南京林业大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西南财经大学\\西南财经大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京医科大学\\南京医科大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\国防科技大学\\国防科技大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京大学\\南京大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京师范大学\\南京师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\深圳大学\\深圳大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\华中科技大学\\华中科技大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\成都理工大学\\成都理工大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西南科技大学\\西南科技大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\江苏大学\\江苏大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中国矿业大学\\中国矿业大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\闽江学院\\闽江学院2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\吉林大学\\吉林大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\中国地质大学(武汉)\\中国地质大学武汉2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\陕西师范大学\\陕西师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\常州大学\\常州大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西南交通大学\\西南交通大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\苏州大学\\苏州大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\东南大学\\东南大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\首都医科大学\\首都医科大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\湖南师范大学\\湖南师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\北京科技大学\\北京科技大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京审计大学\\南京审计大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\郑州大学\\郑州大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京工业大学\\南京工业大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\湖南师范\\湖南师范2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\北京师范大学\\北京师范大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\西南民族大学\\西南民族大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\深圳技术大学\\深圳技术大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\南京财经大学\\南京财经大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\天津大学\\天津大学2023-2023中文发文.csv', 'Z:/客户数据存储/TEMP\\河海大学\\河海大学2023-2023中文发文.csv']
#
# merge_file2(file_list=file_s, filename='F:/工作数据存储2023/20230615_中文发文引文更新/2023', to_type='csv')
# d = read_data(r'Z:\客户数据存储\专利\南京大学\南京大学-专利网.xlsx')
# d.to_csv(r'Z:\客户数据存储\专利\南京大学\南京大学-专利网.csv', index=False)
# merge_csv_files(r'Z:\客户数据存储\WOS\南京工业大学\OG=(Nanjing Tech University) AND (PY==(2022))')
# pprint(count_file_rows(r'Z:\客户数据存储\EI\东南大学\2023'))
"""
path_root = 'Z:\客户数据存储\WOS\成都理工大学'
for x in os.listdir(path_root):
# if x != '2002':
# continue
# Accession number
# merge_table(os.path.join(path_root, x), on_columns=['Accession number'], duplicates=['Accession number'], to_type='csv')
merge_table(os.path.join(path_root, x), duplicates=['UT'], keep='last', file_sort=True)
"""