|
|
# -*- 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)
|
|
|
"""
|