簡體   English   中英

Python:如何替換文件名中的破折號?

[英]Python: How to replace dashes in filenames?

這個問題與遞歸重命名文件的答案有關。

更改為替換破折號的代碼不適用於以下情況:

./Beginners Tools/Hello's -Trojans-/bif43243
./Linux/Nux Col - 1 Works (TEX & Pdf) - T'eouhsoe & More (33323 - 34432)
./Git/peepcode-git-mov/c6_branch_merge.mov
./haskell/OS 2007 - T aoue
./B Sites for Get-Big

它適用於以下情況:

./oeu'oeu - X ee ls - Feb 2008.pdf

所以我需要解析數據。 如何正確替換破折號?

[細節]

該代碼來自鏈接,但已更改為替換“-”:

import os
for dirpath, dirs, files in os.walk(your_path):
    for filename in files:
        if '&' in filename:
            os.rename(
                os.path.join(dirpath, filename),
                os.path.join(dirpath, filename.replace('-', '_'))
            )

Python並未取代所有破折號。 我認為這是因為名稱包含特殊符號,這些符號使腳本更早停止了。 所以我在存檔時遇到錯誤:

tar cvzf sed_backup.tar.gz `find documents | sed  s/\.*/\'\&\'/`
tar: rojans-: Cannot stat: No such file or directory
tar: Error is not recoverable: exiting now

由於名稱中仍然留有符號“”和“-”,因此tar命令將“”表示為find命令的結尾,而將“-”作為選項符號解釋為路徑“。” / Beginners Tools /您好,-Trojans- / bif43243“

os.path.walk非常適合遍歷文件系統樹,這是一個簡單的示例:

import os, shutil

def rename_file(arg, dirname, filename):
   filepath = os.path.join(dirname, filename)
    # check if file meets your rename condition here
    if os.path.isfile(filepath):
       new_name = "something"
       shutil.move(filepath, os.path.join(dirname, new_name)

os.path.walk(base_dir, rename_file, None)

問候亞瑟

您的問題很可能是單引號,括號和破折號。 您可以逃脫它們或替換它們。

實際上看您的編輯,鏈接到的原始代碼是替換文件名中的字符而不是整個路徑。 您需要對路徑中的字符進行轉義:

esc_dirpath = dirpath.replace('-','\-')

那是相當簡單的,也可以使用正則表達式來轉義一組字符。

我建議運行os並在轉義/替換這些字符之前和之后打印出特殊情況,然后再進行真正的重命名。

暫無
暫無

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

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