如何实现嵌套列表中每个URL与同列表最后非空URL配对并导出CSV?
解决301跳转URL配对问题:将每行URL与最后非空URL关联并导出CSV
看起来你已经迈出了第一步,把CSV转成了嵌套列表,接下来我们只需要针对每行数据做几个关键处理,就能得到你想要的配对结果。我来给你梳理完整的实现方案:
核心思路
对于每行的URL列表,我们需要:
- 先过滤掉所有空值(也就是那些
nan),只保留有效的URL - 找到该行最后一个有效URL——这就是最终的跳转目标
- 把该行里除了最后一个之外的所有有效URL,分别和这个最终URL配对
- 最后把所有配对结果导出成CSV,方便开发者直接使用
完整实现代码
我把整个流程整合到一个函数里,你可以直接用:
import pandas as pd import numpy as np def process_301_urls(input_csv_path, output_csv_path): # 读取原始CSV,无表头 csv_data = pd.read_csv(input_csv_path, header=None) paired_urls = [] for _, row in csv_data.iterrows(): # 过滤掉空值,得到当前行的有效URL列表 valid_urls = [url for url in row.tolist() if pd.notna(url)] # 只有当有效URL数量>=2时,才有配对的意义(单个URL没有跳转关系) if len(valid_urls) >= 2: final_target_url = valid_urls[-1] # 遍历前面所有URL,和最终目标URL配对 for original_url in valid_urls[:-1]: paired_urls.append([original_url, final_target_url]) # 将配对结果转为DataFrame并导出CSV,添加清晰的表头 pd.DataFrame(paired_urls, columns=["原始URL", "最终跳转URL"]).to_csv(output_csv_path, index=False) # 调用示例:替换成你的输入输出路径 process_301_urls("Example_301_sheet.csv", "301配对结果.csv")
代码细节说明
- 空值过滤:用
pd.notna()来判断URL是否有效,比直接判断url != nan更可靠,因为numpy的nan比较特殊,普通的相等判断会失效。 - 配对逻辑:比如你给出的示例列表
[['example.com/url1', 'example.com/url2', nan, nan]],处理后会生成[['example.com/url1', 'example.com/url2']],完全符合你的需求。如果遇到更长的跳转链,比如['a.com/page1', 'b.com/redirect', 'c.com/final', nan],会生成两对:['a.com/page1', 'c.com/final']和['b.com/redirect', 'c.com/final'],这样开发者可以一次性把所有中间跳转的URL都直接指向最终地址,彻底消除301链。 - CSV导出:添加了表头
原始URL和最终跳转URL,导出时关闭索引列(index=False),让输出的CSV更干净,直接就能用。
测试验证
你可以先拿一小部分数据测试这个函数,确认配对结果符合预期后,再处理完整的URL列表。如果某行只有一个有效URL,函数会自动跳过它,因为没有跳转关系需要处理。
内容的提问来源于stack exchange,提问作者jceg316
相关产品推荐
相关产品推荐

