首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有阻止os.rename移动文件的方法?

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

Stack Overflow用户
提问于 2020-11-29 02:13:03
回答 2查看 236关注 0票数 1

我创建了一个在visual代码中运行非常好的脚本,但我现在正在尝试自动化这个脚本,事实证明这有点棘手。我已经将该文件转换为用于自动化的Unix可执行文件,但是当我单击我的脚本时,我实现的代码并没有达到我想要的效果。

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

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

代码语言:javascript
复制
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文件就会从目录中消失并从源目录中移出,但我希望防止这种情况发生。原因是,我需要文件留在那里,以便进一步操纵熊猫模块。

是否有方法重命名目录中的所有.cvs文件,并在重命名后将它们保存在源目录中?

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

代码语言:javascript
复制
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.

我已经试过用

代码语言:javascript
复制
print(os.getcwd())

我已经找到了文件应该传输到哪里,但是当我查看目录时,文件似乎不在那里。

要将内容放到上下文中,我需要“熊猫”模块来访问文件(为了操作它),但我需要根据文件类型(.csv)更改文件名,或者让熊猫访问文件类型而不是文件名。

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

代码语言:javascript
复制
pandas.read_csv 

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

更改多个文件名不会有任何问题,因为在我的脚本开始时,有一段代码可以清除目录中所有现有的.csv文件,所以只有一个文件是目标文件。我现在知道重命名不仅仅是重命名。如果源和目标都位于同一个文件夹中,它将将重命名的文件移到新目录中。但是,我希望将该文件保存在同一个目录中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-29 02:49:53

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

代码语言:javascript
复制
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,那么除了最后一个重命名的CSV之外,所有的CSV都将被删除。此外,如果运行这段代码时,旧的CC.csv仍然在该目录中,那么它可能是新的CC.csv,而不是您下载的文件。

票数 0
EN

Stack Overflow用户

发布于 2020-11-29 02:40:30

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

代码语言:javascript
复制
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")

下面是到docs的链接:https://docs.python.org/3/library/shutil.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65056382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档