Files
PositionTracker/uniswap-v2/merge.py

89 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
import csv
from decimal import Decimal
from datetime import datetime
def merge_portfolio_files():
data_dir = "data"
if not os.path.exists(data_dir):
print(f"目录 {data_dir} 不存在")
return
portfolio_files = []
for filename in os.listdir(data_dir):
if filename.startswith("portfolio_") and filename.endswith(".csv"):
portfolio_files.append(filename)
if not portfolio_files:
print("未找到portfolio_*.csv文件")
return
for input_filename in portfolio_files:
output_filename = input_filename.replace("portfolio_", "merged_")
input_path = os.path.join(data_dir, input_filename)
output_path = os.path.join(data_dir, output_filename)
try:
process_single_file(input_path, output_path)
print(f"成功处理: {input_filename} -> {output_filename}")
except Exception as e:
print(f"处理文件 {input_filename} 时出错: {e}")
def process_single_file(input_path, output_path):
date_data = {} # 格式: {日期: {'amount': 净额总和, 'last_time': 最后时间}}
with open(input_path, "r", encoding="utf-8") as infile:
reader = csv.DictReader(infile)
if not all(field in reader.fieldnames for field in ["日期", "类型", "净额"]):
raise ValueError("CSV文件格式不正确需要的列日期,类型,净额")
for row in reader:
full_datetime_str = row["日期"]
try:
full_datetime = datetime.fromisoformat(
full_datetime_str.replace("Z", "+00:00")
)
except ValueError:
print(f"警告:跳过无效的日期格式: {full_datetime_str}")
continue
date_only = full_datetime.date().isoformat()
try:
amount = Decimal(row["净额"])
except ValueError:
print(f"警告:跳过无效的净额值: {row['净额']}")
continue
if date_only in date_data:
date_data[date_only]["amount"] += amount
if full_datetime > date_data[date_only]["last_time"]:
date_data[date_only]["last_time"] = full_datetime
else:
date_data[date_only] = {"amount": amount, "last_time": full_datetime}
sorted_dates = sorted(date_data.keys())
with open(output_path, "w", encoding="utf-8", newline="") as outfile:
writer = csv.writer(outfile)
writer.writerow(["日期", "类型", "净额"])
for date in sorted_dates:
data = date_data[date]
last_datetime_str = data["last_time"].strftime("%Y-%m-%dT%H:%M")
writer.writerow([last_datetime_str, "利息", data['amount']])
def main():
"""主函数"""
print("开始处理portfolio文件...")
merge_portfolio_files()
print("处理完成!")
if __name__ == "__main__":
main()