簡體   English   中英

是否有阻止 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())

而且我已經能夠找到文件應該到達的位置,但是當我查看目錄時,文件似乎不存在。

要將事情放在上下文中,我需要“熊貓”模塊來訪問文件(以便對其進行操作),但我需要根據文件類型(.csv)更改文件名或讓 pandas 訪問文件類型而不是文件名。

這是因為,每次下載 this.csv 文件時,它都有不同的名稱,為了使用

pandas.read_csv 

function,機器人每次都需要文件具有相同的名稱,以便重復該過程。

更改多個文件名不會有任何問題,因為在我的腳本開始時,有一段代碼清除了目錄中所有現有的.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")

這是文檔的鏈接: 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 而不是您下載的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM