[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 请教各路大神:如何从TXT文件中抽取对应数据至excel表格呢???

本帖最后由 qiaodong 于 2021-5-31 14:34 编辑

我有一大堆TXT文件-命名方式为“ 姓名+手机号”,我想在Excel文件中的 “姓名、性别、身份证号码、住址、手机号码” 所在列下  抽取相应的TXT文件数据(个别文件的文件名只有姓名并没有手机号,此项无需理会)如果都是Excel文件的话我还可以操作,但这是TXT文件顿感无措,望各路大神予以指导 , 谢谢!



本帖最后由 wxyz0001 于 2021-6-4 15:23 编辑

▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃
用Python写的,欢迎高手优化代码
▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃
  1. import os
  2. import re
  3. import csv
  4. # 获取所有txt文件
  5. def get_file_list(file_list):
  6.     files = []
  7.     for i in range(len(file_list)):
  8.         if not file_list[i].find('.txt') == -1:
  9.             files.append(file_list[i])
  10.         else:
  11.             continue
  12.     return files
  13. # 获取所有txt文件的内容
  14. def get_data(data_list):
  15.     data = []
  16.     for file in data_list:
  17.         with open(file_path + '/' + file, 'r', encoding='gbk') as f:
  18.             lines = f.readlines()
  19.             for line in lines:
  20.                 if (re.search('\d+', file) != None) and (line.find(':') != -1):
  21.                     key = line.split(':')[0]
  22.                     val = line.split(':')[1].strip('\n')
  23.                     data.append(val)
  24.                     if (line.find(val) != -1) and (key.find('公民身份号码') != -1):
  25.                         tel = re.search('\d+', file).group(0)
  26.                         data.append(tel)
  27.                 elif line.find(':') != -1:
  28.                     key = line.split(':')[0]
  29.                     val = line.split(':')[1].strip('\n')
  30.                     data.append(val)
  31.                     if (re.search('\d+', file) == None) and (key.find('公民身份号码') != -1):
  32.                         tel = 'None'
  33.                         data.append(tel)
  34.     return data
  35. # 格式化为csv格式
  36. def get_cvs_list(txt_cvs):
  37.     data_row = []
  38.     for i in range(0, len(txt_cvs), 7):
  39.         name = txt_cvs[i]
  40.         sex = txt_cvs[i + 1]
  41.         clan = txt_cvs[i + 2]
  42.         birth = txt_cvs[i + 3]
  43.         address = txt_cvs[i + 4]
  44.         number = txt_cvs[i + 5]
  45.         tel = txt_cvs[i + 6]
  46.         data_col = (name, sex, clan, birth, address, number, tel)
  47.         data_row.append(data_col)
  48.     return data_row
  49. if __name__ == '__main__':
  50.     file_path = 'E:/news/Python/txt_cvs'  # txt文件目录
  51.     filename = file_path + '/' + 'data.csv'  # 保存CSV文件路径
  52.     dir_list = os.listdir(file_path)
  53.     txt_list = get_file_list(dir_list)
  54.     txt_rows = get_data(txt_list)
  55.     lines = get_cvs_list(txt_rows)
  56.     with open(filename, 'a+', encoding='gbk', newline='') as f: # 如果txt的文本格式为'utf-8',把'gbk'改为'utf-8'
  57.         k = csv.writer(f, dialect='excel')
  58.         fieldnames = ('姓名', '性别', '民族', '出生日期', '住址', '公民身份号码', '手机号码')
  59.         with open(filename, 'r', encoding='gbk', newline='') as ff: # 如果txt的文本格式为'utf-8',把'gbk'改为'utf-8'
  60.             reader = csv.reader(ff)
  61.             seed = set(tuple(row) for row in reader)  # 去除重复的行
  62.             for line in lines:
  63.                 if fieldnames not in seed:
  64.                     k.writerow(fieldnames)
  65.                     seed.add(fieldnames)
  66.                 if line in seed:
  67.                     continue
  68.                 k.writerow(line)
  69.                 seed.add(line)
复制代码

TOP

返回列表