qq_42907389 2024-07-26 19:41 采纳率: 100%
浏览 2
已结题

(标签-python|关键词-path)

系统环境Windows 11,在研究Python抓包的数据保存时出现的问题

这是我的源码:

import requests
from pathlib import Path
import json
import datetime

url = "https://api.bilibili.com/x/web-interface/ranking/v2?type=all"
headers = {
    "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers).json()
path = Path(f"./{datetime.datetime.now().strftime('%Y-%m-%d %H:%M')}.json")
path.write_text(json.dumps(response, ensure_ascii=False, indent=4),
                encoding="utf-8")

我的问题是:

当我的本机日期为2024/7/26 19:29时,程序应保存文件名为2024-7-26 19:29.json的json文件,但是他却保存出了2024-07-26 19的文件,且内容为空,但是如果我将path这样写的话:

path = Path(f"./{datetime.datetime.now().strftime('%Y-%m-%d %H-%M')}.json")

程序却可以按照我的预期将保存出2024-7-26 19-29.json的文件并且保存了正确的抓包数据。

如图:

img

我的猜想是:会不会影响Path模块对文件路径的读取,不知道是被转义了还是什么,而且:后面的内容会被一并忽略。即2024-7-26 19:29.json被程序读取成2024-07-26 19。又因为2024-7-26 19-29.json不好看,所以才纠结这个问题。希望大家能够帮我解决这个问题,如有不清楚的再问。

  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-07-26 19:41
    关注

    引自免费微信小程序:皆我百晓生

    这个问题似乎与Windows系统下路径字符串的处理有关。在Windows系统中,路径中的某些字符(如冒号:)有特殊含义,它们可能被解释为路径分隔符或参数分隔符。因此,在文件名中使用这些字符可能会导致问题。在你的例子中,文件名中的冒号可能是造成问题的原因。

    你可以尝试以下方法来解决这个问题:

    1. 使用斜杠/代替冒号:来分隔日期和时间。例如,将文件名改为2024-07-26/19-29.json。这种方法应该可以避免路径解析问题。
    2. 使用Python的str.replace()方法将文件名中的冒号替换为其他字符,如短横线-。在生成文件名时,可以使用如下代码:
    filename = datetime.datetime.now().strftime('%Y-%m-%d').replace('-', '/') + '/' + datetime.datetime.now().strftime('%H-%M').replace(':', '-') + '.json'
    path = Path(f"./{filename}")
    

    这样,文件名将变为类似于2024-07-26/19-29.json的形式,避免了使用冒号引起的路径解析问题。然后你可以使用这个路径来保存你的JSON文件。

    另外,请确保你的代码逻辑是正确的。你的代码中使用了Path模块的write_text()方法来写入文件内容,但是请注意这个方法的参数是字符串内容,而不是文件对象。因此,你应该直接传入JSON字符串作为参数,而不是尝试调用path.writetext()方法(这是不存在的)。以下是正确的代码示例:

    import requests
    from pathlib import Path
    import json
    import datetime
    
    url = "https://api.bilibili.com/x/web-interface/ranking/v2?type=all"
    headers = {
        "User-Agent": "Mozilla/..."  # 你的User-Agent字符串
    }
    
    response = requests.get(url, headers=headers).json()
    filename = datetime.datetime.now().strftime('%Y-%m-%d').replace('-', '/') + '/' + datetime.datetime.now().strftime('%H-%M').replace(':', '-') + '.json'
    path = Path(f"./{filename}")
    path.write_text(json.dumps(response, ensure_ascii=False, indent=4), encoding="utf-8")
    

    希望这些方法能够帮助你解决问题。如果还有其他疑问,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月13日
  • 已采纳回答 8月5日
  • 创建了问题 7月26日