使用 Python Pandas 比较常见条目的动态文件
Comparing dynamic files for common entries using Python Pandas
我有 N 个 .txt 文件,每个文件在一个目录中有数千个 IP 地址(例如 /var/logs)。文件名以 'log' 开头,例如 log01.test.co.net、log02.hello.co.net、log01.domain.co.net 等。我需要将每个 .txt 文件中的 IP 作为一列添加到excel 文件并比较所有列以找到共同的 IP。然后将公共 IP 打印为另一个名为“公共 IP”的列。
如何使用 Python Pandas 库实现要求?有人可以帮忙吗?
我是 Python 的新手,并且能够从网上找到我们可以使用 Python Pandas 库将 txt 文件转换为 excel 格式。
#!/usr/bin/env python3
import pandas as pd
df = pd.read_table('log01.txt')
df.to_excel('output.xlsx', 'Sheet2')
使用pathlib
获取所有日志文件并使用pd.read_csv
加载它们。使用 value_counts
提取常用 IP 地址,然后将它们添加到 common_ips
列:
import pandas as pd
import pathlib
# Parse all log files
data = {}
for logfile in pathlib.Path('/var/logs').glob('log*'):
df = pd.read_csv(logfile, squeeze=True).drop_duplicates() \
.sort_values().reset_index(drop=True)
data[logfile.name] = df
# Merge all data from logs
df = pd.concat(data)
# Find common IP addresses through all files
common_ips = df.value_counts().eq(df.index.levels[0].nunique()) \
.loc[lambda x: x].index.to_frame(index=False, name='common_ips')
# Create final dataframe and export it to Excel
df = df.unstack(level=0).join(common_ips)
df.to_excel('report.xlsx', index=False)
示例输出:
log02.hello.co.net log01.domain.co.net log01.test.co.net common_ips
0 1.114.104.134 1.156.243.176 1.131.142.79 99.19.144.176
1 1.124.207.151 1.243.206.110 1.207.189.107 NaN
2 1.13.108.19 1.62.221.173 1.249.176.100 NaN
3 1.147.63.14 1.63.85.25 1.252.71.6 NaN
4 1.90.129.211 1.147.154.71 1.27.141.156 NaN
.. ... ... ... ...
957 98.162.171.47 NaN NaN NaN
958 99.19.144.176 NaN NaN NaN
959 99.20.58.108 NaN NaN NaN
960 99.220.179.58 NaN NaN NaN
961 99.97.17.252 NaN NaN NaN
[962 rows x 4 columns]
我有 N 个 .txt 文件,每个文件在一个目录中有数千个 IP 地址(例如 /var/logs)。文件名以 'log' 开头,例如 log01.test.co.net、log02.hello.co.net、log01.domain.co.net 等。我需要将每个 .txt 文件中的 IP 作为一列添加到excel 文件并比较所有列以找到共同的 IP。然后将公共 IP 打印为另一个名为“公共 IP”的列。
如何使用 Python Pandas 库实现要求?有人可以帮忙吗?
我是 Python 的新手,并且能够从网上找到我们可以使用 Python Pandas 库将 txt 文件转换为 excel 格式。
#!/usr/bin/env python3
import pandas as pd
df = pd.read_table('log01.txt')
df.to_excel('output.xlsx', 'Sheet2')
使用pathlib
获取所有日志文件并使用pd.read_csv
加载它们。使用 value_counts
提取常用 IP 地址,然后将它们添加到 common_ips
列:
import pandas as pd
import pathlib
# Parse all log files
data = {}
for logfile in pathlib.Path('/var/logs').glob('log*'):
df = pd.read_csv(logfile, squeeze=True).drop_duplicates() \
.sort_values().reset_index(drop=True)
data[logfile.name] = df
# Merge all data from logs
df = pd.concat(data)
# Find common IP addresses through all files
common_ips = df.value_counts().eq(df.index.levels[0].nunique()) \
.loc[lambda x: x].index.to_frame(index=False, name='common_ips')
# Create final dataframe and export it to Excel
df = df.unstack(level=0).join(common_ips)
df.to_excel('report.xlsx', index=False)
示例输出:
log02.hello.co.net log01.domain.co.net log01.test.co.net common_ips
0 1.114.104.134 1.156.243.176 1.131.142.79 99.19.144.176
1 1.124.207.151 1.243.206.110 1.207.189.107 NaN
2 1.13.108.19 1.62.221.173 1.249.176.100 NaN
3 1.147.63.14 1.63.85.25 1.252.71.6 NaN
4 1.90.129.211 1.147.154.71 1.27.141.156 NaN
.. ... ... ... ...
957 98.162.171.47 NaN NaN NaN
958 99.19.144.176 NaN NaN NaN
959 99.20.58.108 NaN NaN NaN
960 99.220.179.58 NaN NaN NaN
961 99.97.17.252 NaN NaN NaN
[962 rows x 4 columns]