有没有办法修改字符串以删除小数?

我有一个包含很多图像的文件。每个图像的名称如下:

  • 100304.jpg

  • 100305.jpg

  • 100306.jpg

  • ETC...

我还有一个电子表格,每张图片是一行,行中的第一个值是名称,名称后面的值是各种小数和0来描述每张图像的特征。

问题是,当我从工作表中提取名称时,会添加一个小数,这会导致文件无法通过 shutil.move()

import xlrd

import shutil


dataLocation = "C:/Users/User/Documents/Python/Project/sort_solutions_rev1.xlsx"

imageLocBase = "C:/Users/User/Documents/Python/Project/unsorted"

print("Specify which folder to put images in. Type the number only.")

print("1")

print("2")

print("3")

int(typeOfSet) = input("")


#Sorting for folder 1

if int(typeOfSet) == 1:

#Identifying what to move

        name = str(sheet.cell(int(nameRow), 0).value)

        sortDataStorage = (sheet.cell(int(nameRow), 8).value) #float

        sortDataStorageNoFloat = str(sortDataStorage) #non-float

        print("Proccessing: " + name)

        print(name + " has a correlation of " + (sortDataStorageNoFloat))


#sorting for this folder utilizes the information in column 8)

        if sortDataStorage >= sortAc:

                print("test success")

                folderPath = "C:/Users/User/Documents/Python/Project/Image Folder/Folder1"

                shutil.move(imageLocBase + "/" + name, folderPath)

                print(name + " has been sorted.")

        else:

                print(name + " does not meet correlation requirement. Moving to next image.")

我遇到的问题是 shutil.move(imageLocBase + "/" +name, folderPath) 出于某种原因,我的代码从电子表格中获取名称(例如:100304),然后添加一个“.0”所以当尝试要移动文件,它试图移动 100304.0(不存在)而不是 100304。


千万里不及你
浏览 100回答 4
4回答

千巷猫影

用于pandas读取您的 Excel 文件。正如对原始问题的评论中所建议的,这里是一个如何使用pandas读取 Excel 文件的快速示例,以及一个数据结构示例。有任何问题,请随时喊叫,或查看文档。import pandas as pd# My path looks a little different as I'm on Linux.path = '~/Desktop/so/MyImages.xlsx'df = pd.read_excel(path)数据结构这完全是人为的,因为我没有您的实际文件的示例。    IMAGE_NAME  FEATURE_1   FEATURE_2   FEATURE_30   100304.jpg  0.0111      0.111       1.1111   100305.jpg  0.0222      0.222       2.2222   100306.jpg  0.0333      0.333       3.333希望这有助于您入门。建议:当您遇到小数(数据类型)问题时,Excel 喜欢认为它很聪明并且会做“意想不到的”事情。 也许考虑将您的图像数据存储在数据库 (SQLite) 中或作为普通的旧 CSV 文件。 熊猫也可以从其中任何一个中读取!:-)

绝地无双

splitOn = '.'nameOfFile = text.split(splitOn, 1)[0]应该管用如果我们取您的文件名,例如 12345.0 并创建一个 varname = "12345.0"现在我们需要拆分这个变量。在这种情况下,我们希望拆分. 所以我们将此条件保存为第二个 varsplitOn = '.'  将 .split 用于 python。在这里,我们提供文本(变量名)和 python split 命令。所以让它字面意思12345.0split at .only make one split and save as two vars in a list (so we have 12345 at position 0 (1st value) and 0 at position 1 (2nd value) in a list)save 1st var(as all lists are 0 based we ask for [0] (if you ever get confused with list, arrays etc just start countingfrom 0 instead of one on your hands and then you know ie position 0 1 2 3 4 = 1st value, 2nd value, 3rd value, 4th value, 5th value)nameOfFile = name.split(splitOn, 1)[0]              12345.0 split ( split on . , only one split ) save position 0 ie first value所以.....name = 12345.0splitOn = '.'nameOfFile = name.split(splitOn, 1)[0]   yield(nameOfFile)输出将是12345我希望这有助于 https://www.geeksforgeeks.org/python-string-split/或者如下所示,转换为浮动到 https://www.geeksforgeeks.org/type-conversion-python/如果保存为浮点数name 12345.0newName = round(int(name))这将使浮点数四舍五入(因为它的 0 将向下舍入)或者如果 float 保存为字符串print(int(float(name)))

qq_花开花谢_0

如果总是在变量末尾添加“.0”,则需要以这种方式读取 var_string“name”:shutil.move(imageLocBase + "/" + name[:-2], folderPath)字符串就像一个列表,我们可以选择要读取的元素。切片就是用这种方法对不起我的英语不好。再见

神不在的星期二

显然,您从电子表格中检索的值被解析为浮点数,因此当您将其转换为字符串时,它会保留小数部分。您可以从字符串值中修剪“.0”,或者在转换为字符串之前将其转换为整数。您还可以检查电子表格的单元格格式并确保其设置为正常(idk 设置,但不是数字)。修复后,您的数据可能不再随 .0 提供。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python