是否有阻止 os.rename 移动文件的方法?

Is there a to stop os.rename from moving a file?

我创建了一个 运行 在 visual studio 代码中完全没问题的脚本,但我现在正在尝试自动化该脚本,事实证明这有点棘手。我已将该文件转换为用于自动化的 Unix 可执行文件,但是当我单击我的脚本时,我实现的代码没有按照我的要求执行。

我有一行代码可以更改目录中所有 .csv 文件的名称。

这是我所说的特定代码行……

spath='/Users/emmanuel/Documents/Selenium/'
sourcefiles = os.listdir(spath)
for file in sourcefiles:
    if file.endswith('.csv'):
        os.rename(os.path.join(spath,file), "CC.csv")

我想将 .csv 文件更改为的名称是 CC.csv 我使用这种编码方法是因为 .csv 文件的名称每次下载时都有不同的名称。

我现在遇到的问题是,当脚本到达代码的这一部分时,.csv 文件就从目录中消失并从源目录中移出,但我想防止这种情况发生。原因是我需要将文件保留在那里以便 pandas 模块进一步操作。

有没有办法将一个目录下的所有.cvs文件重命名,重命名后保留在源目录中?

我在 VSC 中 运行 这段代码,它 运行 非常好,但是当我 运行 它作为一个单元可执行文件时,我得到这个错误…

Traceback (most recent call last):
  File "/Users/emmanuel/Documents/Selenium/OptionsBotCode.py", line 120, in <module>
    CC = pd.read_csv('/Users/emmanuel/Documents/Selenium/CC.csv')
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py", line 688, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py", line 454, in _read
    parser = TextFileReader(fp_or_buf, **kwds)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py", line 948, in __init__
    self._make_engine(self.engine)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py", line 1180, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py", line 2010, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas/_libs/parsers.pyx", line 382, in pandas._libs.parsers.TextReader.__cinit__
  File "pandas/_libs/parsers.pyx", line 674, in pandas._libs.parsers.TextReader._setup_parser_source
FileNotFoundError: [Errno 2] No such file or directory: '/Users/emmanuel/Documents/Selenium/CC.csv'
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

我已经尝试使用

print(os.getcwd())

而且我已经能够找到文件应该传送到的位置,但是当我查看目录时,文件似乎不在那里。

为了说明问题,我需要“pandas”模块来访问文件(以便对其进行操作),但我需要根据文件类型更改文件名 (. csv) 或 pandas 访问文件类型而不是文件名。

这是因为,每次下载此 .csv 文件时,它都有不同的名称,并且为了使用

pandas.read_csv 

函数,机器人每次都需要文件具有相同的名称,以便它可以重复该过程。

更改多个文件名不会有任何问题,因为在我的脚本开头,有一段代码会清除目录中所有现有的 .csv 文件,因此它只会是一个文件那是有针对性的。我现在明白重命名不仅仅是重命名。如果源和目标都在同一个文件夹中,它将把重命名的文件移动到一个新目录中。但是,我想将文件保存在同一目录中

您似乎应该先创建该文件的副本,然后将原始文件重命名为您的目标目录。

from shutil import copy
spath='/Users/emmanuel/Documents/Selenium/'
sourcefiles = os.listdir(spath)
for file in sourcefiles:
    if file.endswith('.csv'):
        copy(src, dst)(os.path.join(spath,file), "CC.csv")

这是文档的 link:https://docs.python.org/3/library/shutil.html

要将 CSV 保存在源目录中,将该目录添加到目标名称中。

spath='/Users/emmanuel/Documents/Selenium/'
dcsv = os.path.join(spath, "CC.csv")
sourcefiles = os.listdir(spath)
for file in sourcefiles:
    if file.endswith('.csv'):
        os.rename(os.path.join(spath,file), dcsv)

请注意,如果目录中有多个 CSV,除了最后一个重命名的之外的所有文件都将被删除。此外,如果当您 运行 此代码时旧 CC.csv 仍在该目录中,它可能最终成为新的 CC.csv 而不是您下载的文件。