【问题标题】:String to Integer error on file name文件名上的字符串到整数错误
【发布时间】:2016-11-25 16:11:05
【问题描述】:

我正在尝试将 59 添加到我文件夹中所有文件的特定位置的 3 位数字中,但它给出了这个错误:

ValueError: int() 以 10 为底的无效文字:''

我检查了打印,确实是一个 3 字符的字符串,只包含数字(从外观上看)

代码:

import os

def left(s, amount):
        return s[:amount]

def right(s, amount):
        return s[-amount:]

def mid(s, offset, amount):
        return s[offset:offset+amount]


for filename in os.listdir("V:\HD_RASTER\CTA2-GUA3"):
        s = mid(filename, 21, 3)
        print("Chars : " + len(s) + " String : " + s)
        s = int(s) + 59
        s = string(s)   
        os.rename(filename,left(filename,21) +  s + mid(filename,24,len(filename))

文件名文件夹截图:

【问题讨论】:

  • s = string(s) 打算做什么?
  • 您的代码适用于我(手动输入文件名进行测试)。如果 int(s) 无效,它会给你你得到的错误......它可能适用于大多数文件,但也许其中有一个长度不同的文件?以及说了什么(或问了什么)。
  • @kindall 把它变回字符串?我猜是不必要的,但这不是错误
  • @Fhaab 我打印了每个“s”的长度和值,它是一个 3 len 数字
  • 你可以使用try/except来捕捉和打印看看哪个部分出错了。

标签: python python-2.7 operating-system


【解决方案1】:

您的代码非常脆弱,leftmidright 等函数表明您更习惯于另一种语言。

除其他外,这仅在您的当前目录包含文件时才有效,因为listdir 仅返回文件名,而不是路径。所以os.rename 会失败。

试着让它更加灵活和防弹。

import glob
import os

FPATH = r"V:\HD_RASTER\CTA2-GUA3"
FILE_PREFIX= 'TRANS_leilao-004-14_0'
FULL_PREFIX = os.path.join(FPATH,PREFIX)
PREFIX_LEN = len(FULL_PREFIX)

files = glob.glob(FULL_PREFIX+r"???.*")
for old_file in files:
    n = old_file[PREFIX_LEN:PREFIX_LEN+3]
    try:
        new_n = int(n) + 59
    except ValueError:
        print "Failed to parse filename: " + old_file
        continue
    new_file = old_file[:PREFIX_LEN] + str(new_n) + old_file[PREFIX_LEN+3:]
    try:
        os.rename(old_file, new_file)
    catch OSError:
        print "failed to rename " + old_file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    相关资源
    最近更新 更多