我有一个包含许多行的文件,其中包含每行上由逗号,
分隔的数字。
有些行包含float numbers
的数字,即:['9.3']
我一直试图从列表中删除这些数字约1小时〜但没有运气。每当它试图在浮点数上使用int时,它就会出错。我不知道如何从行
中删除这些浮动数字数字:https://pastebin.com/7vveTxjW
这是我到目前为止所做的:
with open('planets.txt','r') as f:
lst = []
temp = []
for line in f:
l = line.strip()
l = l.split(',')
for x in l:
if x == '':
l[l.index(x)] = 0
elif x == '\n' or x == '0':
print "removed value", l[l.index(x)]
del l[l.index(x)]
try:
temp.append([int(y) for y in l])
except ValueError:
pass
答案 0 :(得分:3)
首先,修改你正在迭代的列表是一个坏主意。更好的想法可能是从可以转换为int
的元素构建新列表。
def is_int(element):
try:
int(element)
except ValueError:
return False
return True
with open('planets.txt','r') as f:
lst = []
temp = []
for line in f:
l = line.strip().split(',')
temp.append([int(y) for y in l if is_int(y)])
如果要包含float
值'整数组件,可以执行以下操作:
def is_float(element):
try:
float(element)
except ValueError:
return False
return True
with open('planets.txt','r') as f:
lst = []
temp = []
for line in f:
l = line.strip().split(',')
temp.append([int(float(y)) for y in l if is_float(y)])
答案 1 :(得分:0)
看起来你过度复杂了,一旦你从文件中获得所有数字到列表就运行这个
numbers=["8","9","10.5","11.1"]
intList=[]
for num in numbers:
try:
int_test=int(num)
intList.append(num)
except ValueError:
pass
只需将我的号码列表更改为您的列表名称
答案 2 :(得分:0)
当您获得包含数字的列表(例如,['1','2.3','4.5','1.0']
)时,您可以使用以下
intDigits = [ i for i in digits if float(i) - int(float(i)) == 0]
答案 3 :(得分:0)
在float上执行int()不应该给出错误。也许你的漂浮'实际上是一个字符串,因为你正在从文件中读取,因为
int('9.3')
不起作用,但
int(9.3)
确实
编辑: 如何将此功能应用于每个数字
def intify(n):
if n == '':
return n
try:
return int(n)
except ValueError:
return int(float(n))
答案 4 :(得分:0)
您可以匹配数字后跟一个点后跟更多数字:
import re
output_list = []
input = open('input.txt', 'r')
for line in input:
if '.' not in line:
output_list.append(line)
else:
output_list.append(re.sub(r"(\d+\.\d+)", '', line))
print("Removed", re.search(r"(\d+\.\d+)", line).group(1))
答案 5 :(得分:0)
我会将数字保留为字符串,只需检查是否有点'在每个拆分项目中#39;识别花车。
with open('planets.txt','r') as f:
for line in f:
line = ','.join([item for item in line.strip().split(',') if not '.' in item])
print(line)
# ... write to file ...
答案 6 :(得分:0)
如果您只需要删除浮动,这对我来说是最简单的方法。
mixed = [1,float(1),2,3,4.3,5]
ints = [i for i in mixed if type(i) is not float]
结果:[1, 2, 3, 5]