为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2022-07-26 20:43:35
我有一个包含很多图像的文件。每个图像的名称如下:100304.jpg100305.jpg100306.jpgETC...我还有一个电子表格,每张图片是一行,行中的第一个值是名称,名称后面的值是各种小数和0来描述每张图像的特征。问题是,当我从工作表中提取名称时,会添加一个小数,这会导致文件无法通过 shutil.move()import xlrdimport shutildataLocation = "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 1if 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。
查看完整描述

4 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

用于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_3

0   100304.jpg  0.0111      0.111       1.111

1   100305.jpg  0.0222      0.222       2.222

2   100306.jpg  0.0333      0.333       3.333

希望这有助于您入门。


建议:

当您遇到小数(数据类型)问题时,Excel 喜欢认为它很聪明并且会做“意想不到的”事情。 也许考虑将您的图像数据存储在数据库 (SQLite) 中或作为普通的旧 CSV 文件。 熊猫也可以从其中任何一个中读取!:-)


查看完整回答
反对 回复 2022-07-26
?
绝地无双

TA贡献1946条经验 获得超4个赞

splitOn = '.'

nameOfFile = text.split(splitOn, 1)[0]

应该管用


如果我们取您的文件名,例如 12345.0 并创建一个 var


name = "12345.0"

现在我们需要拆分这个变量。在这种情况下,我们希望拆分. 所以我们将此条件保存为第二个 var


splitOn = '.'  

将 .split 用于 python。在这里,我们提供文本(变量名)和 python split 命令。所以让它字面意思


12345.0

split 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 counting

from 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.0

splitOn = '.'

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.0

newName = round(int(name))

这将使浮点数四舍五入(因为它的 0 将向下舍入)


或者如果 float 保存为字符串


print(int(float(name)))


查看完整回答
反对 回复 2022-07-26
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

如果总是在变量末尾添加“.0”,则需要以这种方式读取 var_string“name”:

shutil.move(imageLocBase + "/" + name[:-2], folderPath)

字符串就像一个列表,我们可以选择要读取的元素。切片就是用这种方法

对不起我的英语不好。再见


查看完整回答
反对 回复 2022-07-26
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

显然,您从电子表格中检索的值被解析为浮点数,因此当您将其转换为字符串时,它会保留小数部分。
您可以从字符串值中修剪“.0”,或者在转换为字符串之前将其转换为整数。

您还可以检查电子表格的单元格格式并确保其设置为正常(idk 设置,但不是数字)。修复后,您的数据可能不再随 .0 提供。


查看完整回答
反对 回复 2022-07-26
  • 4 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信