遍历 python 数组不起作用

Iterating through a python array does not work

以下代码吐出以下内容:

...
6
)
,
 
(
'
1
9
2
.
1
6
8
.
0
.
5
9
'
,
 
6
0
7
1
,
 
'
1
9
2
.
1
6
8
.
0
.
1
9
9
'
,
 
0
,
 
6
)
]

代码:

f=open("example.txt", "r")
list=f.read()

for i in list:
    print(i)

example.txt: https://pastebin.com/uN5wVZKL

example.txt 如下所示:[(IP,number,IP,number,number),(IP,number,IP,number,number),(IP,number,IP,number,number),...]

我以为我可以遍历该数组以获取数组中每个元组中的第一个 IP,但它只是逐个字符而不是逐个元素来迭代字符。

我做错了什么?

此问题已得到解答。这是最终产品:https://pastebin.com/TaVKDVfU

python 中的 print 函数有一个 'end' 参数,默认为换行符 \n

由于每个字符都是单独读入的,因此 i 是一个字符后跟 \n

尝试print(i, end = '')

你想打印什么?每个元组或每个 IP?仅供参考,它不是 Python 中的数组,它是一个列表。

我刚刚完成了这个。

data = [('192.168.0.59', 2881, '192.168.0.199', 0, 6), ('192.168.0.199', 0, '192.168.0.59', 0, 1), ('192.168.0.59', 2882, '192.168.0.199', 0, 6)]

for item in data:
   print(data)

并得到以下内容:

('192.168.0.59', 2979, '192.168.0.199', 0, 6)
('192.168.0.59', 2980, '192.168.0.199', 0, 6)
('192.168.0.59', 2981, '192.168.0.199', 0, 6)
('192.168.0.59', 2982, '192.168.0.199', 0, 6)
('192.168.0.59', 2983, '192.168.0.199', 0, 6)

但是我和你一样做了,得到了一样的结果:

with open("data.txt", "r") as f:
    data = f.read()

for item in data:
    print(item)

但是如果您要执行类似 print(type(data)) 的操作,它会告诉您这是一个字符串。所以这就是为什么你得到你得到的东西。因为您正在迭代该字符串中的每个项目。

with open("data.txt", "r") as f:
    data = f.read()
    new_list = data.strip("][").split(", ")

print(type(data)) # str
print(type(new_list)) # list

因此,您可以 split() 字符串,它会让您回到您的列表。像上面一样...说过我已经测试了拆分选项,但我认为它不会给你想要的结果。像这样使用 ast 时效果更好:

import ast

with open("data.txt", "r") as f:
    data = f.read()
    new_list = ast.literal_eval(data)

for item in new_list:
    print(item)

这会打印出如下内容:

('192.168.0.59', 6069, '192.168.0.199', 0, 6)
('192.168.0.59', 6070, '192.168.0.199', 0, 6)
('192.168.0.59', 6071, '192.168.0.199', 0, 6)

更新

获取第一个IP

import ast

with open("data.txt", "r") as f:
    data = f.read()
    new_list = ast.literal_eval(data)

for item in new_list:
    print(item[0])

f.read() return 你的文本文件的内容是一个字符串,你不能把它转换成一个元组列表。 好吧,你可以使用很多 split() (我建议在“)”或“(”上拆分每个元组,然后在“,”上拆分以获得元组的每个元素)。类似于:

with open("example.txt", "r") as f:
    your_list: list[tuples]

    # read the file as a string
    f_in_str: str = f.read()

    # removing useless characters
    f_in_str = f_in_str.replace("[", "")
    f_in_str = f_in_str.replace("]", "")
    f_in_str = f_in_str.replace("(", "")
    f_in_str = f_in_str.replace(" ", "")
    f_in_str = f_in_str.replace("'", "")

    # split it into a list
    tuples_in_str: list[str] = f_in_str.split("),")

    # convert str to tuples
    for tuple_str in tuples_in_str:
        # split() returns a list that we convert into a tuple
        a_tuple: tuple = tuple(tuple_str.split(","))
        your_list.append(a_tuple)

请注意,我尚未测试该代码。

如果可以的话,我强烈建议您将源格式更改为 csv 之类的格式。这会让以后的事情变得容易很多。