python - 获取文件的创建/修改时间

python - 获取文件的创建/修改时间

背景

在Windows环境下,正对文件的创建/修改时间的展示,只能精确到分钟级别,对于某些log文件的监控,我们需要精确的知悉对应文件的创建和修改时间-需要精确到s甚至毫秒级别。
在这里插入图片描述
但是我们通过对文件的参数进行检查,可以发现,文件的参数中,是包含精确的文件创建和修改时间的,因此我们可以考虑自行通过程序来获取对应的时间。
在这里插入图片描述

python代码实现

  1. 导入相应的库
import os
import datetime
import csv
  1. 定义获取文件修改时间的函数
    这个函数能够获取指定文件夹下所有的文件的修改时间,并将修改时间和文件名组合为dataframe数据返回
def get_files_modification_time(directory):
    # 创建一个列表来存储文件名和修改时间
    file_info_list = []
    # 遍历指定目录下的所有文件
    for filename in os.listdir(directory):
        filepath = os.path.join(directory, filename)
        # 检查是否为文件
        if os.path.isfile(filepath):
            # 获取文件的最后修改时间戳
            modification_time = os.path.getmtime(filepath)
            # 将时间戳转换为包含毫秒的datetime对象
            modification_datetime = datetime.datetime.fromtimestamp(modification_time)
            # 格式化日期时间字符串,包括毫秒
            formatted_modification_time = modification_datetime.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
            # 将文件名和修改时间添加到列表中
            file_info_list.append([filename, formatted_modification_time])
    return file_info_list
  1. 定义数据写入文件函数
    此函数通过获取文件的创建时间的函数的反馈数据作为输入,将这个数据写入指定的csv文件中。
def write_to_csv(file_info, output_file):
    # 写入CSV文件
    with open(output_file, mode='w', newline='', encoding='utf-8') as csvfile:
        csv_writer = csv.writer(csvfile)
        # 写入表头
        csv_writer.writerow(['Filename', 'Modification Time'])
        # 写入数据行
        csv_writer.writerows(file_info)
  1. 通过指定需要获取创建时间的文件夹和输出数据的文件,调用函数执行来获取结果
# 指定要检查的文件夹路径
directory_path = r'C:\VM\ES -1'
# 指定输出CSV文件的路径
output_csv_path = r'C:\VM\output1.csv'
# 获取文件名和修改时间的列表
file_info = get_files_modification_time(directory_path)
# 将结果写入CSV文件
write_to_csv(file_info, output_csv_path)
<think>我们面对的问题:pip3命令执行时出现"bad interpreter: Too many levels of symbolic links"错误。 这个错误通常表示pip3这个可执行文件(实际上是一个Python脚本)的第一行指定的解释器路径(shebang)指向了一个符号链接,而这个符号链接的解析过程中出现了过多的间接层(循环链接或嵌套层数超过系统限制)。 根据引用[1]和引用[3]的分析,可能的原因有两种: 1. pip3脚本的第一行指定的解释器路径(如`#!/usr/bin/python3`)指向的符号链接存在多层嵌套,甚至可能形成循环。 2. 解释器路径本身不存在(但这里错误是“Too many levels”所以更可能是第一种情况)。 引用[1]提到:可能是软链接套软链接套多层,或者本身有循环链接,导致系统递归太多层数超限。 引用[3]提到:在Linux中,由于符号链接指向错误位置,可以通过删除并重新创建正确的链接来解决。 解决方案参考: 引用[1]给出方案1:删掉旧pip,重装新pip(最简单稳妥)。 引用[2]提到:如果是因为环境迁移导致路径变化,可以修改pip脚本的第一行解释器路径为当前环境中正确的Python解释器路径。 引用[3]和引用[4]指出:符号链接问题可以通过检查链接并重新创建正确的符号链接来解决。 因此,我们可以尝试以下步骤: 步骤1:检查pip3脚本的第一行(shebang)指向的解释器路径 使用命令:`head -1 $(which pip3)` 或者:`which pip3 | xargs head -1` 查看输出的路径,例如:`#!/usr/bin/python3` 步骤2:检查这个解释器路径的符号链接情况 例如,如果第一行是`#!/usr/bin/python3`,则运行: `ls -l /usr/bin/python3` 然后根据输出,继续追踪下一个链接,直到找到最终目标(注意是否出现循环或层数过多)。 步骤3:修复解释器路径 有两种方法: 方法A:重新创建正确的符号链接(如果系统Python解释器链接有问题) 例如,假设我们发现/usr/bin/python3指向了某个不存在的路径或者嵌套过多,我们可以: sudo rm /usr/bin/python3 # 删除错误的链接 sudo ln -s /usr/bin/python3.x /usr/bin/python3 # 这里python3.x是实际存在的解释器,例如python3.8 方法B:修改pip3脚本的第一行,直接指向正确的解释器绝对路径(不经过多层链接) 使用编辑器(如sudo vim)打开pip3脚本(通过`which pip3`获取路径),将第一行改为正确的解释器路径,例如:`#!/usr/bin/python3.8` 步骤4:如果上述方法无效,或者不想手动修改,可以采用重装pip的方法 参考引用[1]的方案1:删除pip,然后重新安装。 删除pip3脚本(注意:不要删除pip包,只是删除可执行文件)并不是最佳方法,更安全的方法是重新安装pip。 执行以下命令: python3 -m pip uninstall pip # 卸载当前pip python3 -m ensurepip # 重新安装pip(或者使用官方提供的get-pip.py) 但是,注意:如果系统中有多个Python版本,或者使用了虚拟环境,重装可能会影响其他环境。因此,重装前确保在正确的环境中。 另外,引用[4]提到:创建软链接时使用绝对路径可以避免“Too many levels of symbolic links”错误。因此,在步骤3的方法A中,创建链接时务必使用绝对路径。 具体操作步骤: 1. 首先,确定当前环境中Python解释器的正确位置。 运行:`which python3` 或 `readlink -f $(which python3)` 假设输出为:`/usr/bin/python3.8` 2. 检查pip3脚本的位置和第一行: 运行:`which pip3` 得到pip3路径,假设为`/usr/local/bin/pip3` 然后运行:`head -1 /usr/local/bin/pip3`,查看第一行是否为`#!/usr/bin/python3`(或类似) 3. 检查解释器路径的链接: 运行:`ls -l /usr/bin/python3`,查看它指向哪里。假设它指向`/etc/alternatives/python3`(这是常见的多版本管理情况),然后再检查`/etc/alternatives/python3`指向哪里: `ls -l /etc/alternatives/python3` 如果发现其中某个链接是循环的(比如指向自己)或者层数过多(比如超过10层),则说明问题。 4. 修复: 如果发现`/usr/bin/python3`的链接目标不存在,或者链接嵌套过多,我们可以重建链接: sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.8 /usr/bin/python3 或者,如果不想改变系统级链接(因为可能影响其他程序),我们可以直接修改pip3脚本的第一行为: #!/usr/bin/python3.8 使用命令修改: sudo sed -i "1s|.*|#!/usr/bin/python3.8|" $(which pip3) 5. 如果上述步骤不能解决,或者发现是pip3脚本内部的符号链接问题(比如pip3本身是一个符号链接,而且链接嵌套过多),则考虑: 找到pip3的原始位置(可能是python安装目录下的bin目录),然后直接使用绝对路径创建新的符号链接(或者直接使用绝对路径调用pip3,但这不是长久之计)。 6. 重装pip(如果以上方法都不行): 先卸载:`python3 -m pip uninstall pip -y` 然后重新安装:下载get-pip.py,然后运行`python3 get-pip.py` 注意:在操作前,确保你有sudo权限。 由于每个系统的环境可能不同,请根据实际情况调整。 下面我们将按照上述思路给出具体命令步骤。 但是,请注意:如果系统中有多个Python版本,或者使用了虚拟环境,那么需要确保我们操作的pip3和python3属于同一个环境。 另外,引用[2]中提到的环境迁移问题,如果是整个环境迁移,那么环境内的所有路径都应该更新到新服务器的路径。这种情况下,重装可能是最彻底的解决方案。 因此,我们推荐按照以下顺序尝试: 1. 检查并修复解释器符号链接(针对系统级Python解释器)。 2. 修改pip3脚本的shebang行。 3. 重装pip。 下面详细说明每一步: ### 步骤1:检查并修复解释器符号链接 1. 确定当前pip3使用的解释器路径: ```bash pip3_path=$(which pip3) head -1 "$pip3_path" ``` 输出类似:`#!/usr/bin/python3` 2. 检查该解释器路径的符号链接: ```bash interpreter_path=$(head -1 "$pip3_path" | sed 's/#!//; s/ //g') ls -l "$interpreter_path" ``` 3. 如果输出显示多层链接,可以追踪到最终目标: ```bash real_interpreter=$(readlink -f "$interpreter_path") echo $real_interpreter ``` 4. 如果发现链接层数过多(比如循环),我们需要修复这个链接。假设我们已知正确的解释器路径是`/usr/bin/python3.8`,那么: ```bash sudo rm "$interpreter_path" # 删除有问题的链接(注意:这个路径可能是/usr/bin/python3) sudo ln -s /usr/bin/python3.8 "$interpreter_path" ``` 注意:如果`$interpreter_path`是系统重要文件(如`/usr/bin/python3`),删除前确保你知道你在做什么。 ### 步骤2:修改pip3脚本的shebang行 如果步骤1中修复链接后问题依旧,或者你不想改动系统链接,可以直接修改pip3脚本的第一行: 1. 找到正确的Python解释器路径: ```bash which python3 # 假设输出:/usr/bin/python3.8 ``` 2. 修改pip3脚本的第一行: ```bash sudo sed -i "1s|.*|#!$(which python3)|" "$(which pip3)" ``` ### 步骤3:重装pip 如果以上步骤无效,则重装pip: 1. 卸载当前pip: ```bash python3 -m pip uninstall -y pip ``` 2. 重新安装pip: 方法1:使用ensurepip(可能不安装最新版) ```bash python3 -m ensurepip --upgrade ``` 方法2:使用官方脚本 ```bash curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py ``` 方法3:通过包管理器(如apt)重新安装(适用于系统自带的pip) ```bash sudo apt install --reinstall python3-pip ``` 注意:在重装pip后,可能需要重新安装之前安装过的包(如果它们被卸载了)。但通常重装pip不会影响已安装的包。 ### 预防措施 -创建符号链接时,始终使用绝对路径(如引用[4]所述)。 - 避免手动创建多层符号链接,尤其是循环链接。 如果问题仍然存在,可能需要检查整个Python环境的完整性,或者考虑重新安装Python。 请根据你的系统环境选择合适的方法。如果问题复杂,建议备份重要数据后操作。 现在,我们生成相关问题:</think>### 解决 `pip3 bad interpreter: Too many levels of symbolic links` 错误 此错误通常由 **符号链接嵌套过多** 或 **循环链接** 导致,具体修复步骤如下: --- #### **步骤 1:定位问题根源** 1. **检查 `pip3` 脚本的解释器路径**: ```bash head -1 $(which pip3) ``` 输出类似 `#!/usr/bin/python3`,这是 `pip3` 调用的 Python 解释器路径。 2. **检查该解释器的符号链接层级**: ```bash ls -l /usr/bin/python3 # 替换为你的实际路径 ``` 若输出包含多层链接(如 `python3 → python3.8 → python3.9`),可能超出系统限制(通常 40 层)。 --- #### **步骤 2:修复方法** ##### ✅ 方案 1:修改 `pip3` 脚本的解释器路径(推荐) ```bash # 1. 获取当前 Python3 的真实路径 real_python_path=$(readlink -f $(which python3)) # 2. 修改 pip3 脚本的第一行 sudo sed -i "1s|.*|#!$real_python_path|" $(which pip3) ``` **原理**:将 `pip3` 的 shebang 行(`#!/xxx/python`)直接指向真实解释器,避免多层链接[^1][^4]。 ##### ✅ 方案 2:重建符号链接(适用于系统级问题) ```bash # 1. 删除损坏的链接 sudo rm /usr/bin/python3 # 替换为 head -1 输出的路径 # 2. 重建指向真实解释器的链接 sudo ln -s $(readlink -f $(which python3)) /usr/bin/python3 ``` **原理**:用绝对路径重建符号链接,避免相对路径导致的嵌套问题[^3][^4]。 ##### ✅ 方案 3:重装 `pip3`(终极解决) ```bash # 卸载当前 pip python3 -m pip uninstall pip # 重新安装 pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py ``` **原理**:彻底替换损坏的 `pip3` 脚本和链接[^1][^2]。 --- #### **步骤 3:验证修复** ```bash pip3 --version # 检查是否正常输出 ``` --- #### **预防措施** 1. **避免多层符号链接**:创建软链接时使用绝对路径(如 `ln -s /opt/python/bin/python3 /usr/bin/python3`)[^4]。 2. **慎用环境迁移**:直接复制虚拟环境可能引发路径错误,推荐在新环境重建[^2]。 --- ### 相关问题 1. **如何检查系统中所有损坏的符号链接?** `find /usr/bin -type l ! -exec test -e {} \; -print` 2. **Python 虚拟环境迁移后出现类似错误如何解决?** 3. **`Too many levels of symbolic links` 错误是否会影响其他命令(如 `yum`)?** (参考引用[^3]中 `yum` 的修复案例) [^1]: 引用[1]: 删掉旧 pip 重装新 pip 是最简单稳妥的方法。 [^2]: 引用[2]: 环境迁移后需更新脚本中的解释器路径。 [^3]: 引用[3]: 重建符号链接可解决 `python` 解释器路径错误。 [^4]: 引用[4]: 创建软链接时使用绝对路径避免嵌套问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值