2

我希望在 python 或基本的 shell 脚本中执行此操作。

我有一个包含多个条目的文件,我想操纵它的数据并将它们存储在变量中。

该文件具有多列的行。第一列是一个人的名字(例如,Joe、Mary 等)。第二个(在逗号之后)是一个 ID。我想将每个 ID 存储到一个变量中,然后构造一些链接,如下所示。问题是一个名字只能有一个或多个 ID,如下所示:

Joe, 21142 21143 21909 24125
Mary, 22650 23127
John, 24325
Mike, 24683 24684 26973

如何将“第二列”中的每个值存储到一个变量中,这样我就可以构造如下链接:

http://example/Joe/21142
http://example/Joe/21143
http://example/Joe/21909 
http://example/Joe/24125
http://example/Mary/22650 
http://example/Mary/23127

先感谢您!

  • 奥马尔
4

5 回答 5

1

可以用GNU awk

awk -F'[, ]+' '{for (i=2; i<=NF; ++i) print "http://example/"$1"/"$i }' input.txt
http://example/Joe/21142
http://example/Joe/21143
http://example/Joe/21909
http://example/Joe/24125
http://example/Mary/22650
http://example/Mary/23127
http://example/John/24325
http://example/Mike/24683
http://example/Mike/24684
http://example/Mike/26973

或者在 Python 中

s = '''Joe, 21142 21143 21909 24125
Mary, 22650 23127
John, 24325
Mike, 24683 24684 26973
'''
from StringIO import StringIO
from contextlib import closing
with closing(StringIO(s)) as f:
    for line in f: 
            x, y = line.split(',')
            x = x.strip()
            y = y.strip().split()
            leader = 'http://example/{}'.format(x)
            print '\n'.join('{}/{}'.format(leader, z) for z in y)
于 2013-07-13T03:26:42.047 回答
1

bash 答案:read 命令在文件上逐行操作,并将逗号或空格分隔的单词抓取到数组中

while IFS=$', \t' read -ra words; do
    for ((i=1; i<${#words[@]}; i++)); do
        printf "http://example/%s/%s\n" "${words[0]}" "${words[i]}"
    done
done < file
于 2013-07-13T12:45:06.453 回答
0

尝试

myfile = open('input','r')
link = dict()
for line in myfile:
    line = line.split(",")
    IDs = line[1].split()
    link[line[0]]=IDs
myfile.close()

for name in link.keys():
    for ID in link[name]:
        print ''.join(["www.whatever.com/",name,"/",ID])
于 2013-07-13T03:21:23.160 回答
0

首先,因为您正在重用 url,所以最好创建一个可重用的模板。接下来,由于一个名称可能有多个 id,因此您需要在主循环中运行另一个循环来生成每个 url。下面的代码应该可以工作。

url_template = "http://example/%s/%d"
with open("input.file") as f:
    for line in f:
        name  = line.split(',')[0].strip()
        n_ids = line.split(',')[1].strip().split(' ')
        for n_id in nids:
            print url_template % (name, nid)
于 2013-07-13T03:25:20.640 回答
0

我想我参加这个聚会迟到了,不妨分享一下:

lines  = '''Joe, 21142 21143 21909 24125
Mary, 22650 23127
John, 24325
Mike, 24683 24684 26973'''

    linesList = lines.split("\n")
    for line in linesList:
        lineList = line.split(",")
        lineName = lineList[0];
        lineNumbers = lineList[1].split(" ")
        for lineNumber in lineNumbers:
            if lineNumber.isdigit():
                print("http://example.com/" + lineName + "/" +lineNumber)
于 2013-07-13T03:34:36.770 回答