1. ホーム
  2. python

[解決済み] Pythonで列と行を読み、エントリを反復処理するには?

2022-02-15 07:50:43

質問内容

CSVファイルで、列にホストアドレス、行にそのポートが記載されているものがあります。

私はこのコードを思いついた、これは私が手動でホストIPとポートのセルを使用する場合に動作します。


import socket
import csv

lst = [1,2,3,4,5,6,7,8,9]
 
line_number = 0

while line_number  < len(lst):
    line_number  = int(line_number +1)
    
with open('temp.csv', 'rt') as f:
    mycsv = csv.reader(f)
    mycsv = list(mycsv)
    h = mycsv[line_number][0] 
    line_number  = int(line_number +1)
while line_number  < len(lst): 
    line_number  = int(line_number +1)
with open('temp.csv', 'rt') as f:
    mycsv = csv.reader(f)
    mycsv = list(mycsv)
    p = mycsv[line_number][2] 


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = h
port = int(p)

def portScanner(port):
    if s.connect_ex((host, port)):
        print("Closed")
    else:
        print("Open")

portScanner(port)

サンプルCSV

ip,port 
1.1.1.1,80,443,22
2.2.2.2,80,21,22
3.3.3.3,111,22,21
.
.
.
.

ありがとうございました。

解決方法は?

まず、ヘッダーを next() . 次に、各行を読み取るには、最初に ip アドレスで読み、他のすべてのエントリを ports を使用して、Pythonの * 演算子を使用します。例えば

例えば、以下のようになります。

import csv
import socket

def portScanner(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    if s.connect_ex((ip, port)):
        print(f"  Port {port}: Closed")
    else:
        print(f"  Port {port}: Open")


with open('temp.csv') as f_input:
    csv_input = csv.reader(f_input)
    header = next(csv_input)
    
    for ip, *ports in csv_input:
        print(f"IP: {ip}")
    
        for port in ports:
            portScanner(ip, int(port))