translate()在python错误中只接受一个参数(给定2个)

时间:2016-09-07 17:08:57

标签: python string file

import os
import re

def rename_files():
    # get the files from dir
    file_list=os.listdir(r"C:\OOP\prank")
    print(file_list)
    saved_path=os.getcwd()
    print("current working directory"+saved_path)
    os.chdir(r"C:\OOP\prank")
    #rename the files
    for file_name in file_list:
        print("old name-"+file_name)
        #print("new name-"+file_name.strip("0123456789"))
        os.rename(file_name,file_name.translate(None,"0123456789"))
        os.chdir(saved_path)

rename_files()

由于翻译行显示错误...帮我下一步做什么..我正在使用翻译从文件名中删除数字。

Traceback (most recent call last):
    File "C:\Users\vikash\AppData\Local\Programs\Python\Python35-  32\pythonprogram\secretName.py", line 17, in <module>
rename_files()
      File "C:\Users\vikash\AppData\Local\Programs\Python\Python35-  32\pythonprogram\secretName.py", line 15, in rename_files
     os.rename(file_name,file_name.translate(None,"0123456789"))
     TypeError: translate() takes exactly one argument (2 given)

13 个答案:

答案 0 :(得分:10)

str.translate需要dict将unicode序列映射到其他unicode oridinals(如果要删除该字符,则需要None)。您可以像这样创建它:

old_string = "file52.txt"
to_remove = "0123456789"
table = {ord(char): None for char in to_remove}
new_string = old_string.translate(table)
assert new_string == "file.txt"

然而,通过使用str.maketrans函数,可以更简单地制作表格。它可以采用各种各样的参数,但是你需要三个arg形式。我们忽略前两个args,因为它们用于将字符映射到其他字符。第三个arg是你想删除的字符。

old_string = "file52.txt"
to_remove = "0123456789"
table = str.maketrans("", "", to_remove)
new_string = old_string.translate(table)
assert new_string == "file.txt"

答案 1 :(得分:6)

Python中的高级版本使用此:

eg: oldname= "delhi123"    
remove="1234567890"    
table=str.maketrans("","",remove)    
oldname.translate(table)    

您的查询的整体解决方案:

import os    

def rename_file_names():    
    file_list=os.listdir(r"C:\Users\welcome\Downloads\Compressed\prank")    
    print (file_list)    
    saved_path=os.getcwd()    
    print("current working direcorty is"+saved_path)    
    os.chdir(r"C:\Users\welcome\Downloads\Compressed\prank")    
    remove="123456789"    
    table=str.maketrans("","",remove)    
    for file_name in file_list:    
        os.rename(file_name,file_name.translate(table))    


rename_file_names()    

答案 2 :(得分:2)

更改os.rename(file_name,file_name.translate(None,"0123456789"))os.rename(file_name,file_name.translate(str.maketrans('','',"0123456789"))) 它将起作用。

答案 3 :(得分:1)

这是翻译的工作方式:

yourstring.translate(str.maketrans(fromstr, tostr, deletestr));

将fromstr中的字符替换为tostr中的相同字符,并删除deletestr中的所有字符。 fromstr和tostr可以为空字符串,而deletestr参数可以省略。

答案 4 :(得分:1)

import os

def rename_files():
    #1 get file names from folder
    list_files = os.listdir(r"C:\Personal\Python\prank")
    print(list_files)
    saved_path = os.getcwd()
    print(os.getcwd())
    os.chdir(r"C:\Personal\Python\prank\")

    #2 for each file, rename filename
    remove = "0123456789"
    table = str.maketrans("","",remove)
    for file_name in list_files:
        os.rename(file_name, file_name.translate(table))

    os.chdir(saved_path)

rename_files()

答案 5 :(得分:0)

而不是翻译为什么不这样做:

case

答案 6 :(得分:0)

如果你使用python 3.X,试试这个:file_name.lstrip()

    os.rename(file_name,file_name.lstrip(None,"0123456789"))

答案 7 :(得分:0)

此功能

// Action Cable provides the framework to deal with WebSockets in Rails.
// You can generate new channels where WebSocket features live using the rails generate channel command.
//
//= require action_cable
//= require_self
//= require_tree ./channels

(function() {
  this.App || (this.App = {});

  App.cable = ActionCable.createConsumer();

}).call(this);

var jumboHeight = $('.jumbotron').outerHeight();
function parallax(){
    var scrolled = $(window).scrollTop();
    $('.bg').css('height', (jumboHeight-scrolled) + 'px');
}

$(window).scroll(function(e){
    parallax();
});

仅适用于python 2.7。如果您使用的是更高版本,则可以使用以下功能,该功能非常类似,并且可以在更高版本的python中使用。

str.translate(table[, deletechars])

它返回bytes对象的副本,其中删除了可选参数delete中发生的所有字节

所以在你的代码中,改变这行代码

bytes.translate(table[, delete=b''])

os.rename(file_name,file_name.translate(None,"0123456789"))

答案 8 :(得分:0)

使用以下代码:

os.rename(file_name,file_name.lstrip("0123456789"))

答案 9 :(得分:0)

如果您要完成的所有事情是在Python 3中执行与Python 2中相同的操作,那么这就是我在Python 2.0中所做的,以丢弃标点符号和数字:

text = text.translate(None, string.punctuation)
text = text.translate(None, '1234567890')

这是我的Python 3.0等效版本:

text = text.translate(str.maketrans('','',string.punctuation))
text = text.translate(str.maketrans('','','1234567890'))

基本上,它说的是“什么都没有翻译成无内容”(前两个参数),并将所有标点符号或数字都转化为“无”(即删除它们)。

答案 10 :(得分:0)

使用命令python secret_message.py运行文件。可以。

这是完整的代码:

import os

def named_files():     #(1)从文件夹中获取文件名     file_list = os.listdir(r“ /用户/ archananagaraja /桌面/ AN_Personal / Udacity_Python /恶作剧”)     打印(文件列表)     current_dir = os.getcwd()     print(“我的当前目录是:” + current_dir)     os.chdir(r“ / Users / archananagaraja / Desktop / AN_Personal / Udacity_Python / prank”)     #(2)为每个文件重命名文件名     对于file_list中的file_name:         os.rename(file_name,file_name.translate(None,“ 0123456789”)) named_files()

答案 11 :(得分:0)

代替使用函数getcwd()只是有效

import os 

def rename_files():
    #(1) get file names from a folder 

    file_list = os.listdir(r"D:\prank\prank")
    os.chdir(r"D:\prank\prank")
    #remove any numbers
    remove = "0123456789"
    chart = str.maketrans("","", remove)
    # files name renamed  
    for file_name in file_list:
        os.rename(file_name, file_name.translate(chart))
        print(file_name)

答案 12 :(得分:0)

尝试一下:

"".join(c for c in "123hello.jpg" if c not in "0123456789")

列表理解: https://medium.com/swlh/list-comprehensions-in-python-3-for-beginners-8c2b18966d93