人生苦短,我用 Python。
Python 是一种图灵完备的高级计算机语言,可以用来解决计算机可以解决的任何可计算问题。
<aside> 💡 Wikipedia 在可计算性理论,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)可以用来模拟任何图灵机,那么它便符合图灵完备(Turing-complete或computationally universal)。这意味着这个系统也可以识别其他数据处理规则集,图灵完备性被用作表达这种数据处理规则集的一种属性。如今,几乎所有编程语言都是具有图灵完备性的。这个词以引入图灵机概念的数学家艾伦·图灵命名。
Excel 公式为非图灵完备的语言,只能解决 Excel 软件内特定的问题。 图灵完备就像一台全功能的工具箱,可以解决计算机可计算解决的一切问题。
</aside>
小试牛刀:在中国人民银行官网获取上个月最后一个公告的美元对人民币汇率:
import requests
from bs4 import BeautifulSoup
import re
from datetime import datetime
def get_last_month_exchange_rate():
# 修改这个网址为你的目标网址
target_url = "<http://www.pbc.gov.cn/zhengcehuobisi/125207/125217/125925/index.html>"
host_name = "<http://www.pbc.gov.cn>"
# 获取网页内容
response = requests.get(target_url)
response.encoding = 'utf-8'
# BeautifulSoup解析网页
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有公告,获取日期和链接
announcements = [{
'date': datetime.strptime(a.split("中国")[0], '%Y年%m月%d日'),
'url': host_name + a.find_previous('a').get('href'),
} for a in soup.find_all(text=re.compile("(\\d{4}年\\d{1,2}月\\d{1,2}日).*人民币汇率中间价公告"))]
# 排序所有公告
sorted_announcements = sorted(announcements, key=lambda x: x['date'], reverse=True)
# 找到日期最新的上一个月的公告
year, month = sorted_announcements[0]['date'].year, sorted_announcements[0]['date'].month
last_month_announcements = [a for a in sorted_announcements if a['date'].year == year and a['date'].month == month%12] if month != 1 else [a for a in sorted_announcements if a['date'].year == year - 1 and a['date'].month == 12]
announcement_url = last_month_announcements[0]['url']
# 获取公告内容
announcement_response = requests.get(announcement_url)
announcement_response.encoding = 'utf-8'
# 提取汇率
rate_pattern = re.compile("1美元对人民币(\\d+\\.\\d+)元")
rate = re.search(rate_pattern, announcement_response.text).group(1)
return rate
print(get_last_month_exchange_rate())
初步感受 pandas:
import pandas as pd
df = pd.read_excel(file_path, sheet_name='对账文件')
trade_filter_df = df[df['业务类型'] == '收单']
refund_filter_df = df[df['业务类型'] == '退款']
total_fee = trade_filter_df['收入(元)'].sum()
refund_fee = refund_filter_df['支出(元)'].sum()
print(total_fee, refund_fee)
import pandas as pd
df_101 = pd.read_excel(path)
aggregated_df = df_101.groupby('收款账号')['金额'].sum().reset_index()
# ...拼接所有账单数据
bill_df = pd.DataFrame(data=bill_rows,
columns=['账户ID', '第三方账单收款', '第三方账单总金额', '第三方账单退款金额'])
# 减法核验,结果为 0 则无差异
# 合并账单 DataFrame 和汇总文件 DataFrame
# 类似 Excel 的 VLOOKUP
merged_df = pd.merge(aggregated_df, bill_df, on='账户ID', how='outer')
merged_df["核验"] = merged_df["金额"] - merged_df["第三方账单总金额"] + merged_df["第三方账单退款金额"]
print(merged_df["核验"])