当前位置: 首页 > news >正文

提取多个txt数据并合成excel——例子:与中国建交的国家

提取多个txt数据并合成excel——例子:与中国建交的国家

  • 一、概要
  • 二、整体架构流程
  • 三、完整代码

一、概要

  这段代码主要执行以下任务:

  1. 定义辅助函数:首先,定义了两个辅助函数。has_chinese_chars函数用于检查给定的字符串中是否包含中文字符。try_convert_to_date函数则尝试将给定的字符串转换为日期,如果无法转换,则返回一个大的日期值(代表无穷大)。
  2. 读取和整理数据:然后,在主函数部分,代码首先初始化了一个空的列表countries和一个包含五大洲名称的列表continent。然后,通过循环遍历每个大洲,读取相应的txt文件,将数据添加到countries列表中,同时为每行数据添加所属的大洲名称。
  3. 排序数据:接下来,使用sorted_countries列表对数据进行排序,排序的依据是每行数据的第三个元素(即日期)。这里使用了前面定义的try_convert_to_date函数来转换日期,如果无法转换,则将数据放在排序后的列表的最后。
  4. 写入Excel文件:最后,代码创建了一个新的Excel工作簿和工作表,将排序后的数据写入到工作表中,然后保存这个Excel文件。

  总的来说,这段代码的主要作用是从五个txt文件中提取数据,将数据进行排序,并将结果写入到一个Excel文件中。

二、整体架构流程

  这段代码的主要流程如下:

  1. 定义了两个辅助函数:has_chinese_chars用于判断一个字符串是否包含中文字符,try_convert_to_date用于尝试将一个字符串转换为日期,如果转换失败,则返回一个最大的日期值。
  2. 在主函数中,首先初始化了一个空列表countries,以及一个包含五个大陆名称的列表continent
  3. 对continent列表进行遍历,每次遍历都会读取一个特定大陆的txt文件(文件路径由大陆名称和’.txt’组成),并将读取的数据存储到DataFrame对象df中。
  4. 将DataFrame对象转换为一个列表,并在每一行数据前添加所属大陆名称。
  5. 将修改后的列表扩展到countries列表中。
  6. 使用sorted函数对countries列表进行排序,排序依据是子列表的第三个元素(索引为2),使用try_convert_to_date函数尝试将其转换为日期,如果不能转换则视为无穷大。
  7. 创建一个新的Excel工作簿和工作表。
  8. 将排序后的列表的第一行(标题行)写入工作表。
  9. 将排序后的列表的其他行(数据行)写入工作表。
  10. 保存Excel文件。

  这段代码的目的是读取几个大陆的CSV文件,将它们的数据按照日期排序,并将结果写入一个Excel文件中。

三、完整代码

程序所用到的txt数据见文末

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023-09-23 13:17
# @Author : Leuanghing Chen
# @Blog : https://blog.csdn.net/weixin_46153372?spm=1010.2135.3001.5421
# @File : 与中国建交国家.py
# @Software : PyCharmimport pandas as pd
import re
from datetime import datetime, date
from openpyxl import Workbook# 判断字符串中是否包含中文汉字
def has_chinese_chars(s):pattern = re.compile(u'[\u4e00-\u9fa5]')return bool(pattern.search(s))# 根据日期排序,含有中文字符的排在所有其他日期之后
def try_convert_to_date(s):try:# 尝试将字符串转换为日期return datetime.strptime(s, '%Y.%m.%d').date()except ValueError:# 如果转换失败,返回一个浮点数,比如一个大的值,确保它在排序时处于最后的位置return date.maxif __name__ == '__main__':countries = []continent = ['亚洲', '大洋洲', '欧洲', '非洲', '美洲']for i in range(len(continent)):# 这将读取一个CSV文件,并返回一个DataFrame对象df = pd.read_csv(r'D:\python_demo\与中国建交国家\statics\{}.txt'.format(continent[i]), delimiter=' ', header=None)# 如果你想要一个列表,你可以将DataFrame转换为一个列表lines = df.values.tolist()# 在每一行数据前添加所属洲for item in lines:item.insert(0, continent[i])# 合并列表countries.extend(lines)# 使用sorted函数进行排序,将子列表的第三个元素(索引为2)作为排序键# 我们使用try_convert_to_date函数将字符串转换为日期,如果不能转换则视为无穷大sorted_countries = sorted(countries, key=lambda x: try_convert_to_date(x[2]))# 创建工作簿和工作表wb = Workbook()ws = wb.active# 写入标题行ws.append(sorted_countries[0])# 写入数据行for i in range(1, len(sorted_countries)):ws.append(sorted_countries[i])# 保存Excel文件wb.save("countries.xlsx")

  
附件1:亚洲.txt

阿富汗 1955.1.20
亚美尼亚 1992.4.6
阿塞拜疆 1992.4.2
巴林 1989.4.18
孟加拉国 1975.10.4
文莱 1991.9.30
柬埔寨 1958.7.19
朝鲜 1949.10.6
东帝汶 2002.5.20
格鲁吉亚 1992.6.9
印度 1950.4.1
印度尼西亚 1950.4.13
伊朗 1971.8.16
伊拉克 1958.8.25
以色列 1992.1.24
日本 1972.9.29
约旦 1977.4.7
哈萨克斯坦 1992.1.3
科威特 1971.3.22
吉尔吉斯斯坦 1992.1.5
老挝 1961.4.25
黎巴嫩 1971.11.9
马来西亚 1974.5.31
马尔代夫 1972.10.14
蒙古 1949.10.16
缅甸 1950.6.8
尼泊尔 1955.8.1
阿曼 1978.5.25
巴基斯坦 1951.5.21
巴勒斯坦 1988.11.20
菲律宾 1975.6.9
卡塔尔 1988.7.9
韩国 1992.8.24
沙特阿拉伯 1990.7.21
新加坡 1990.10.3
斯里兰卡 1957.2.7
叙利亚 1956.8.1
塔吉克斯坦 1992.1.4
泰国 1975.7.1
土耳其 1971.8.4
土库曼斯坦 1992.1.6
阿拉伯联合酋长国 1984.11.1
乌兹别克斯坦 1992.1.2
越南 1950.1.18
也门 1956.9.24

  
附件2:大洋洲.txt

澳大利亚 1972.12.21
库克群岛 1997.7.25
斐济 1975.11.5
基里巴斯 1980.6.25(复交日期:2019.9.27)
密克罗尼西亚 1989.9.11
新西兰 1972.12.22
纽埃 2007.12.12
巴布亚新几内亚 1976.10.12
萨摩亚 1975.11.6
所罗门群岛 2019.9.21
汤加 1998.11.2
瓦努阿图 1982.3.26

  
附件3:欧洲.txt

阿尔巴尼亚 1949.11.23
安道尔 1994.6.29
奥地利 1971.5.28
白俄罗斯 1992.1.20
比利时 1971.10.25
波斯尼亚和黑塞哥维那 1995.4.3
保加利亚 1949.10.4
克罗地亚 1992.5.13
塞浦路斯 1971.12.14
捷克 1949.10.6
丹麦 1950.5.11
爱沙尼亚 1991.9.11
芬兰 1950.10.28
法国 1964.1.27
德国 1972.10.11
希腊 1972.6.5
匈牙利 1949.10.6
冰岛 1971.12.8
爱尔兰 1979.6.22
意大利 1970.11.6
拉脱维亚 1991.9.12
列支敦士登 1950.9.14
立陶宛 1991.9.14
卢森堡 1972.11.16
马耳他 1972.1.31
摩尔多瓦 1992.1.30
摩纳哥 1995.1.16
黑山 2006.7.6
荷兰 中荷1972年5月18日建立大使级外交关系(1954年互派代办)
北马其顿 1993.10.12
挪威 1954.10.5
波兰 1949.10.7
葡萄牙 1979.2.8
罗马尼亚 1949.10.5
俄罗斯 1949.10.2
圣马力诺 1971.5.6
塞尔维亚 详见备注
斯洛伐克 1949.10.6
斯洛文尼亚 1992.5.12
西班牙 1973.3.9
瑞典 1950.5.9
瑞士 1950.9.14
乌克兰 1992.1.4
英国 中英1972年3月13日建立大使级外交关系(1954年互派代办)

  
附件4:美洲.txt

安提瓜和巴布达 1983.1.1
阿根廷 1972.2.19
巴哈马 1997.5.23
巴巴多斯 1977.5.30
玻利维亚 1985.7.9
巴西 1974.8.15
加拿大 1970.10.13
智利 1970.12.15
哥伦比亚 1980.2.7
哥斯达黎加 2007.6.1
古巴 1960.9.28
多米尼克 2004.3.23
多米尼加 2018.5.1
厄瓜多尔 1980.1.2
萨尔瓦多 2018.8.21
格林纳达 1985.10.1
圭亚那 1972.6.27
牙买加 1972.11.21
墨西哥 1972.2.14
尼加拉瓜 1985.12.7(复交日期:2021.12.10)
巴拿马 2017.6.13
秘鲁 1971.11.2
苏里南 1976.5.28
特立尼达和多巴哥 1974.6.20
美国 1979.1.1
乌拉圭 1988.2.3
委内瑞拉 1974.6.28

  
附件5:非洲.txt

阿尔及利亚 1958.12.20
安哥拉 1983.1.12
贝宁 1964.11.12
博茨瓦纳 1975.1.6
布基纳法索 1973.9.15
布隆迪 1963.12.21
喀麦隆 1971.3.26
佛得角 1976.4.25
中非 1964.9.29
乍得 1972.11.28
科摩罗 1975.11.13
刚果(金) 1961.2.20
刚果(布) 1964.2.22
科特迪瓦 1983.3.2
吉布提 1979.1.8
埃及 1956.5.30
赤道几内亚 1970.10.15
厄立特里亚 1993.5.24
埃塞俄比亚 1970.11.24
加蓬 1974.4.20
冈比亚 1974.12.14
加纳 1960.7.5
几内亚 1959.10.4
几内亚比绍 1974.3.15
肯尼亚 1963.12.14
莱索托 1983.4.30
利比里亚 1977.2.17
利比亚 1978.8.9
马达加斯加 1972.11.6
马拉维 2007.12.28
马里 1960.10.25
毛里塔尼亚 1965.7.19
毛里求斯 1972.4.15
摩洛哥 1958.11.1
莫桑比克 1975.6.25
纳米比亚 1990.3.22
尼日尔 1974.7.20
尼日利亚 1971.2.10
卢旺达 1971.11.12
圣多美和普林西比 1975.7.12
塞内加尔 1971.12.7
塞舌尔 1976.6.30
塞拉利昂 1971.7.29
索马里 1960.12.14
南非 1998.1.1
南苏丹 2011.7.9
苏丹 1959.2.4
坦桑尼亚 1964.4.26
多哥 1972.9.19
突尼斯 1964.1.10
乌干达 1962.10.18
赞比亚 1964.10.29
津巴布韦 1980.4.18

相关文章:

提取多个txt数据并合成excel——例子:与中国建交的国家

提取多个txt数据并合成excel——例子:与中国建交的国家 一、概要二、整体架构流程三、完整代码 一、概要 这段代码主要执行以下任务: 1. 定义辅助函数:首先,定义了两个辅助函数。has_chinese_chars函数用于检查给定的字符串中是否…...

uni-app:js修改元素样式(宽度、外边距)

效果 代码 1、在<view>元素上添加一个ref属性&#xff0c;用于在JavaScript代码中获取对该元素的引用&#xff1a;<view ref"myView" id"mybox"></view> 2、获取元素引用 &#xff1a;const viewElement this.$refs.myView.$el; 3、修改…...

day36-单元测试

1. 单元测试Junit 1.1 什么是单元测试&#xff1f;&#xff08;掌握&#xff09; 对部分代码进行测试。 1.2 Junit的特点&#xff1f;&#xff08;掌握&#xff09; 是一个第三方的工具。&#xff08;把别人写的代码导入项目中&#xff09;&#xff08;专业叫法&#xff1a;…...

7、脏话检测

6、片花关联长视频 脏话检测功能本身远不如上一篇介绍的片花关联长视频有技术挑战性&#xff0c;不过还是值得说说&#xff0c;因为这是我们采用技术方式提高工作效率的第一次尝试。 游戏解说是审核难度比较大的一类短视频内容&#xff0c;一方面是时间比较长&#xff0c;很多…...

Godot信号教程(使用C#语言)| 创建自定义信号 | 发出自定义信号 | 使用代码监听信号

文章目录 信号是什么连接信号使用编辑器连接信号使用代码连接信号Lambda 自定义信号声明信号发射信号带参数的信号 其他文章 信号是什么 在Godot游戏引擎中&#xff0c;信号是一种用于对象之间通信的重要机制。它允许一个对象发出信号&#xff0c;而其他对象可以连接到这个信号…...

分布式文件存储系统minio、大文件分片传输

上传大文件 1、Promise对象 Promise 对象代表一个异步操作&#xff0c;有三种状态&#xff1a; pending: 初始状态&#xff0c;不是成功或失败状态。fulfilled: 意味着操作成功完成。rejected: 意味着操作失败。 只有异步操作的结果&#xff0c;可以决定当前是哪一种状态&a…...

在 msys2/mingw 下安装及编译 opencv

最简单就是直接安装 pacman -S mingw-w64-x86_64-opencv 以下记录一下编译的过程 1. 安装编译工具及第三方库 pacman -S --needed base-devel mingw-w64-x86_64-toolchain unzip gccpacman -S python mingw-w64-x86_64-python2 mingw-w64-x86_64-gtk3 mingw-w64-x86_64-…...

java 根据身份证号码判断性别

在Java中&#xff0c;您可以根据身份证号码的规则来判断性别。中国的身份证号码通常采用的是以下规则&#xff1a; 第17位数字代表性别&#xff0c;奇数表示男性&#xff0c;偶数表示女性。 通常&#xff0c;男性的出生日期的第15、16位数字是01&#xff0c;女性是02。 请注意&…...

信息服务上线渗透检测网络安全检查报告和解决方案4(XSS漏洞修复)

系列文章目录 信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)信息服务上线渗透检测网络安全检查报告和解决方案信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆…...

【SQL】mysql创建定时任务执行存储过程--20230928

1.先设定时区 https://blog.csdn.net/m0_46629123/article/details/133382375 输入命令show variables like “%time_zone%”;&#xff08;注意分号结尾&#xff09;设置时区&#xff0c;输入 set global time_zone “8:00”; 回车,然后退出重启&#xff08;一定记得重启&am…...

安全基础 --- MySQL数据库解析

MySQL的ACID &#xff08;1&#xff09;ACID是衡量事务的四个特性 原子性&#xff08;Atomicity&#xff0c;或称不可分割性&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;Durability&#xff09; &…...

软件设计师考试学习3

开发模型 瀑布模型 现在基本被淘汰了 是一种结构化方法中的模型&#xff0c;一般用于结构化开发 问题在于需求阶段需求不可能一次搞清楚&#xff0c;很可能做完推翻重做 适用于需求明确或二次开发 原型模型、演化模型、增量模型 原型是为了解决需求不明确的问题 原型在项目…...

使用LDA(线性判别公式)进行iris鸢尾花的分类

线性判别分析((Linear Discriminant Analysis &#xff0c;简称 LDA)是一种经典的线性学习方法&#xff0c;在二分类问题上因为最早由 [Fisher,1936] 提出&#xff0c;亦称 ”Fisher 判别分析“。并且LDA也是一种监督学习的降维技术&#xff0c;也就是说它的数据集的每个样本都…...

王学岗生成泛型的简易Builder

github大佬地址 使用 //class 可以传参DataBean.classpublic static <T> T handlerJson(String json, Class<T> tClass) {T resultData null;if (CommonUtils.StringNotNull(json) && !nullString.equals(json)) {if (isArray(json)) {resultData BaseN…...

kafka消息队列简单使用

下面是使用Spring Boot和Kafka实现消息队列的简单例子&#xff1a; 引入依赖 在pom.xml中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.7.5&l…...

性能优化实战使用CountDownLatch

1.分析问题 原程序是分页查询EventAffinityScoreDO表的数据&#xff0c;每次获取2000条在一个个遍历去更新EventAffinityScoreDO表的数据。但是这样耗时比较慢&#xff0c;测试过30万的数据需要2小时 private void eventSubjectHandle(String tenantId, String eventSubject) …...

基于视频技术与AI检测算法的体育场馆远程视频智能化监控方案

一、方案背景 近年来&#xff0c;随着居民体育运动意识的增强&#xff0c;体育场馆成为居民体育锻炼的重要场所。但使用场馆内的器材时&#xff0c;可能发生受伤意外&#xff0c;甚至牵扯责任赔偿纠纷问题。同时&#xff0c;物品丢失、人力巡逻成本问题突出&#xff0c;体育场…...

leetcodetop100(29) K 个一组翻转链表

K 个一组翻转链表 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改…...

最新影视视频微信小程序源码-带支付和采集功能/微信小程序影视源码PHP(更新)

源码简介&#xff1a; 这个影视视频微信小程序源码&#xff0c;新更新的&#xff0c;它还带支付和采集功能&#xff0c;作为微信小程序影视源码&#xff0c;它可以为用户 提供丰富的影视资源&#xff0c;包括电影、电视剧、综艺节目等。 这个小程序影视源码&#xff0c;还带有…...

C++:vector 定义,用法,作用,注意点

C 中的 vector 是标准模板库&#xff08;STL&#xff09;提供的一种动态数组容器&#xff0c;它提供了一组强大的方法来管理和操作可变大小的数组。以下是关于 vector 的定义、用法、作用以及一些注意点&#xff1a; 定义&#xff1a; 要使用 vector&#xff0c;首先需要包含 …...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...