美好的一天,
我正在尝试编写一个从文本文件中获取IP地址的python脚本,检查CSV文件中是否已存在IP地址,如果IP地址已经存在则不执行任何操作(通过),如果IP CSV文件中不存在,然后将该IP地址附加到CSV文件中。
我可以将IP地址添加到CSV文件中,但我无法理解如何检查文件中是否已存在IP地址。
if os.path.isfile('IP_file.txt'):
logfile = open('IP_file.txt', 'r')
csv_file = open('csv_file.csv', 'ab')
for line in logfile:
if line in csv_file: # This is not working
pass
else:
csv_file.write(line)
csv_file.close()
logfile.close()
else:
print('No file with filename ' logfile 'created')
我也试过使用CSV模块,但没有运气。任何帮助深表感谢。
答案 0 :(得分:2)
CSV只是一种文字格式。逐行阅读,根据您的IP测试每一行。像
ip="192.168.1.1"
for line in csv_file:
if ip in line:
found = True
break
我有点担心你在磁盘上循环文件。可能最好将文件读入内存(首先在CSV文件中查找所有IP并放入列表中),然后检查列表,而不是为每个IP文件行打开并迭代整个CSV文件。
答案 1 :(得分:1)
保留包含唯一获取值的列表或词典:
found_address = []
with open('IP_file.txt', 'r') as logfile:
with open('csv_file.csv', 'ab') as csv_file:
for line in logfile:
if not line in found_address:
csv_file.write(line)
found_address.append(line)
答案 2 :(得分:1)
您正在追加模式ab
中打开csv_file.csv。然后你试图检查line in csv_file
。在append-mode文件指针指向文件结尾。
答案 3 :(得分:1)
小小的疯狂功能风格的python:
ip_file = set(map(str.strip, open('IP_file.txt').readlines()))
如果CSV文件是: 192.168.1.1,192.168.1.2,192.168.1.3,...
csv_file = set(map(str.strip, open('csv_file.csv').read().split(',')))
diff_ip = ip_file - csv_file
open('csv_file.csv','a').write(''.join(map(lambda x: ',{}'.format(x), list(diff_ip))))