1.在处理Pajek的.net数据集的时候遇到了一个问题:利用

graph = igraph.read(pajekPath, format='pajek')

读取Pajek数据集的时候,得到的网络是无向的。但是人家数据集明明说了那是个有向网络,所以,我要是用这个读取到的无向网络进行实验,那肯定是会得到错误的科研结果。于是我便想自己写个代码来处理这些Pajek数据集。

我下载的数据集的格式是这样的(前10行):

2 1 42 106 1078
4 3
6 5 154 335 361 119 843 1000 1205 1281 1520 598 608 1814
8 7 765 1491
9 208 777 1765
10 9 360 452 526 707 1018 1190 1480 1753 1850
12 11 181 254 816 940 1252 1265 1345 1373 710 1827 1838
14 13 1181 1685 1693 1828
15 673 539
16 15 107 359 510 1441

它表示的意义是:比如第一行的2 1 42 106 1078,也就是说从节点2有一条边指向节点1,同理,节点2有一条边指向节点42,节点2有一条边指向节点106,以此类推。。。

2.我利用with open方法已经获取到了整个文件里面的内容,并且我读取到第一行的内容并将其赋给line:

with open(filePath, mode='r', encoding='utf-8') as fin:
    for line in fin:

第一次循环的时候,line的值就为'2 1 42 106 1078\n',\n表示换行。

python取ERA5中指定范围数据_python取ERA5中指定范围数据

 这是line的值:

python取ERA5中指定范围数据_list_02

 那么此时,我的任务就是取出字符串中的所有数字,并将他们保存到一个列表里。之后再将每一行的第一个数字与除第一个数字以外的数字进行有向的组合。所以,我想到了正则表达式来获取字符串中的每一个数字并将其保存到列表中。

直接使用代码:

verticsReflect = re.findall(r"\d+\.?\d*", line)

解题思路:

1.既然是提取数字,那么数字的形式一般是:整数,小数,整数加小数;
2.所以一般是形如:----.-----;
3.根据上述正则表达式的含义,可写出如下的表达式:"\d+\.?\d*";
4.\d+匹配1次或者多次数字,注意这里不要写成*,因为即便是小数,小数点之前也得有
一个数字;\.?这个是匹配小数点的,可能有,也可能没有;\d*这个是匹配小数点之后的
数字的,所以是0个或者多个;

以上思路来源于博客,于是我就获取到了字符串中的数字,并将其保存到了一个数组,以便接下来的计算。