gpt4 book ai didi

python - 在 python 中保持格式的同时将字符串列表转换为整数

转载 作者:太空狗 更新时间:2023-10-30 00:26:51 26 4
gpt4 key购买 nike

所以我想做的事情看起来相对简单,但对于我的生活来说,我就是不太明白。我有一个类似 .txt 的文件

4 2
6 5 1
9 4 5

而且我希望它的信息像这样可供我使用(即,除非有必要,否则我不需要编写新的 .txt 文件。)...

3 1
5 4 0
8 3 4

或者,从每个数字中减去 1,但格式保持不变。原件中永远不会有大于 1 的数字,因此不可能出现负数。这整个令人头疼的问题是由于将索引转换为以 0 而不是 1 开头。可能使事情复杂化的是原始文件打印成这样

['4 2 /n','6 5 1 /n', '9 4 5 /n']

我做了什么

它是 different 的大杂烩我的东西found在 StackOverflow 上,但我认为我将以最繁琐的方式进行处理。和 this当我实现它时,一个没有意义..虽然它可能与空格问题在同一条轨道上..

origianl = open(file, 'r')
for line in original.readlines():
newline = line.replace(" \n","")
finalWithStrings.append(newline)

finalWithIntegers = [map(int,x) for x in finalWithStrings]
finalWithIntegers[:] = [x-1 for x in finalWithIntegers]

我的想法是,我需要删除“/n”并将这些字符串转换为整数,以便我可以从中减去 1。并以某种方式保留格式。格式相同很重要,因为每一行都包含有关另一个文件的类似索引行的信息。我不想在最终结果(或打印语句)中看到“/n”,但我仍然想要新行开始的效果。但是,上面的代码由于两个原因(据我所知)而无法工作。

int(n[:]) 抛出错误,因为它不喜欢空格,当我在其中放置一个值(比如 0)时,代码会在每个空格上打印第一个数字行并减去一个..并将其全部放在一行上。

[3, 5, 8]

因此,取出一个回车符并不得不放入另一个回车符似乎是多余的,但我确实需要保留格式,并有办法获取所有数字!

这也行不通:

for line in original.readlines():
newline = line.replace(" \n","")
finalWithStrings.append(newline)

finalWithIntegers = [map(int,x) for x in finalWithStrings]
finalWithIntegers[:] = [x-1 for x in finalWithIntegers]

但不仅仅是一个错误的输出,而是一个错误:

ValueError:invalid literal for int() with base 10:''

有人知道我在这里做错了什么以及如何解决这个问题吗?我正在使用 Python 2.6 并且是初学者。

最佳答案

with open("original_filename") as original:
for line in original:
#if you just want the line as integers:
integers = [ int(i) - 1 for i in line.split() ]
#do something with integers here ...

#if you want to write a new file, use the code below:
#new_line = " ".join([ str(int(i) - 1) for i in line.split() ])
#newfile.write(new_line + '\n')

在上面的示例中,我在上下文管理器中打开了您的文件,因为这是一个很好的做法(自 2.5 版起)。上下文管理器确保您的文件在您退出该上下文时正确关闭。

编辑

看起来您可能正在尝试创建一个 2D 列表......为此,类似这样的方法会起作用:

data = []
with open("original_filename") as original:
for line in original:
integers = [ int(i) - 1 for i in line.split() ]
data.append(integers)

或者,如果您更喜欢 1-liner(我不喜欢):

with open("original_filename") as original:
data = [ [int(i) for i in line.split()] for line in original ]

现在如果你打印它:

for lst in data:
print (lst) # [3, 1]
# [5, 4, 0]
# [8, 3, 4]

关于python - 在 python 中保持格式的同时将字符串列表转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11800522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com