熊猫读取csv文件并从文件中grep主机名

时间:2019-03-26 15:03:59

标签: python-3.x pandas

我有一个CSV文件,我正在尝试根据以下代码用pandas进行读取。

代码段:

import pandas as pd
import os
data = pd.read_csv(input("Please input the CSV File Name: "), usecols=['Safe', 'Platform ID', 'Target system address']).dropna()
df = data[data['Platform ID'].str.startswith("TDS-Unix")][['Target system address', 'Safe' ]]
print(df)

上面我用作脚本的代码如下:

$ ./getcbk_srvlist_1_1.py
Please input the CSV File Name: InventoryReport.csv
                  Target system address                          Safe

3                                host01     TDS-PAR-DEFAULT-UNIX-ROOT
4                                host06          TDS-OT-SCM-UNIX-ROOT
5                                host09     TDS-PAR-DEFAULT-UNIX-ROOT

以上是我从DataFrame中获得的输出的一种,现在,我正在寻找一种grep来自host_list.txt文件的以下主机名的方法。

下面是host_list.txt

host01     
host02
host03
host04
host05
host06
host07
host08
host09

任何想法都会很有帮助。

所需:

$./getcbk_srvlist_1_1.py | egrep "hosts044|hosts045"
InventoryReport.csv

52                     host044      TDS-OTT-DEFAULT-UNIX-Root
25238                  hosts045      TDS-DJ-DEFAULT-UNIX-ROOT

1 个答案:

答案 0 :(得分:2)

我认为您在创建df之后需要将host_list.txt读入另一个数据框。

df2 = pd.read_csv('host_list.txt',header=None)
df2.columns = ['host_list']


df2
Out[13]: 
  host_list
0    host01
1    host02
2    host03
3    host04
4    host05
5    host06
6    host07
7    host08
8    host09

如果您随后希望基于与df相同的主机对df2进行子集设置,则可以使用pandas.DataFrame.isin

df = df[df['Target system address'].isin(df2.host_list.unique())]

哪个返回:

  Target system address                       Safe
0                host01  TDS-PAR-DEFAULT-UNIX-ROOT
1                host06       TDS-OT-SCM-UNIX-ROOT
2                host09  TDS-PAR-DEFAULT-UNIX-ROOT