为什么Python找不到我的文件?

2 投票
1 回答
2843 浏览
提问于 2025-04-18 02:37

有个人写了一个搞笑的“陷阱音乐”脚本,但我就是让它运行不起来。

usage: trapifier.py [-h] [--samples [SAMPLES]] inputfile outputfile

尽管文件夹看起来是这样的

ls -l
total 14288
-rwxrwxrwx   1 ________  ________  7295612 Mar  2  2008 Chicago.mp3
-rwxr-xr-x@  1 ________  ________     1074 Apr 12 17:00 LICENSE
-rwxr-xr-x@  1 ________  ________     2871 Apr 12 17:00 README.md
-rwxr-xr-x@  1 ________  ________        6 Apr 12 17:00 requirements.txt
drwxr-xr-x@ 48 ________  ________     1632 Apr 12 17:00 samples
-rwxr-xr-x   1 ________  ________     2923 Apr 12 17:00 trapifier.py

但是这个命令总是出现 [Errno 2] 没有这样的文件或目录的错误

./trapifier.py Chicago.mp3 Chiraq.mp3

或者

python trapifier.py Chicago.mp3 Chiraq.mp3

甚至还会出现

./trapifier.py /full/path/to/Chicago.mp3 Chiraq.mp3

这是怎么回事?我觉得这里面肯定有个新手错误。

完整的错误信息在这里:

    Traceback (most recent call last):
  File "./trapifier.py", line 89, in <module>
    overlay(parse())
  File "./trapifier.py", line 32, in parse
    base_track = pydub.AudioSegment.from_mp3(inputfile)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pydub/audio_segment.py", line 297, in from_mp3
    return cls.from_file(file, 'mp3')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pydub/audio_segment.py", line 284, in from_file
    subprocess.call(convertion_command, stderr=open(os.devnull))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 679, in     __init__
    errread, errwrite)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1249,     in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

这个脚本的源代码可以在 https://github.com/japesinator/trapifier.py 找到

我已经安装了所有需要的库(argparse, pydub, os, random)。

第一次有用的补充:看起来是 pydub.AudioSegment 加载失败导致的问题。不过,事情变得更奇怪了。在 Python 终端里我可以这样做

from pydub import AudioSegment

但当我尝试

import pydub.AudioSegment

时却出现了没有这个模块的错误。

1 个回答

3

很多时候,pydub找不到ffmpeg,这个工具是用来解码和编码mp3文件(还有其他非wav格式文件)的。如果你已经安装了ffmpeg,但它还是不工作,你可以明确告诉pydub去哪里找它,方法如下:

from pydub import AudioSegment
AudioSegment.ffmpeg = "/path/to/ffmpeg"

你也可以查看我们的ffmpeg安装指南,可能会对你有帮助 =D

编辑 – 最后的办法:如果你尽了最大努力还是让pydub找不到ffmpeg,你可以在把文件传给pydub之前,把所有文件转换成wav格式。这确实是最后的办法,但这样可以避免ffmpeg的问题,因为pydub本身就支持wav格式。

撰写回答