生成元组列表并使用i

2024-10-02 16:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想打开一个文件,获取文件中的所有行,并将每一行转换为列表中的一个元组,然后使用该元组生成输出。你知道吗

我当前的代码如下所示:

def file(name):
    fn = open(name)
    for line in fn:
        line_list = line.strip().split(";")
        main_list.append(line_list)
        return 

当我打印列表时,它只显示其中一行文件,该文件如下所示:

De Aza, Alejandro; CWS; 153; 607; 84; 160; 27; 4; 17
Hunter, Torii; DET; 144; 606; 90; 184; 37; 5; 17
Hamilton, Josh; LAA; 151; 576; 73; 144; 32; 5; 21
Choo, Shin-Soo; CIN; 154; 569; 107; 162; 34; 2; 21
Upton, Justin; ATL; 149; 558; 94; 147; 27; 2; 27
Cabrera, Miguel; DET; 148; 555; 103; 193; 26; 1; 44
Posey, Buster; SF; 148; 520; 61; 153; 34; 1; 15
Suzuki, Ichiro; NYY; 150; 520; 57; 136; 15; 3; 7
Holliday, Matt; STL; 141; 520; 103; 156; 31; 1; 22
Headley, Chase; SD; 141; 520; 59; 130; 35; 2; 13
Cabrera, Asdrubal; CLE; 136; 508; 66; 123; 35; 2; 14
Pierzynski, A.J.; TEX; 134; 503; 48; 137; 24; 1; 17
Hoes, L.J.; HOU; 46; 167; 24; 48; 7; 2; 1
Young Jr., Eric; COL; 57; 165; 22; 40; 9; 3; 1
Hairston, Scott; CHC; 52; 99; 13; 17; 2; 0; 8
Arnaud, Travis; NYM; 31; 99; 4; 20; 3; 0; 1
Ankiel, Rick; NYM; 20; 66; 7; 12; 4; 1; 2
Ankiel, Rick; HOU; 25; 62; 6; 12; 3; 0; 5
den Dekker, Matt; NYM; 27; 58; 7; 12; 1; 0; 1
Sanchez, Angel; CWS; 1; 2; 0; 0; 0; 0; 0

它只输出第一行:

[['De Aza, Alejandro', ' CWS', ' 153', ' 607', ' 84', ' 160', ' 27', ' 4', ' 17']]

为什么会这样?你知道吗


Tags: 文件name列表linedemattlistfn
2条回答

在代码中,内部循环中有一个return语句:

def file(name):
    fn = open(name)
    for line in fn:
        line_list = line.strip().split(";")
        main_list.append(line_list)
        return # Here

试着把它取出来,看看程序的行为有什么不同。你知道吗

为了更清楚地了解发生了什么,您可以尝试添加一些打印语句来查看流程:

def file(name):
    fn = open(name)
    for line in fn:
        print('a')
        line_list = line.strip().split(";")
        main_list.append(line_list)
        print('b')
        return # Here
        print('c')

因为在处理完第一行之后,您将立即返回。取消插入return语句,如下所示

for line in fn:
    line_list = line.strip().split(";")
    main_list.append(line_list)
return main_list

通过列表理解可以更好地解决这个问题,就像这样

def read_file(name):
    with open(name) as in_fil:
        return [[item.strip() for item in l.rstrip().split(";")] for l in in_fil]

有了这个功能,它就产生了

[['De Aza, Alejandro', 'CWS', '153', '607', '84', '160', '27', '4', '17'],
 ['Hunter, Torii', 'DET', '144', '606', '90', '184', '37', '5', '17'],
 ['Hamilton, Josh', 'LAA', '151', '576', '73', '144', '32', '5', '21'],
 ['Choo, Shin-Soo', 'CIN', '154', '569', '107', '162', '34', '2', '21'],
 ['Upton, Justin', 'ATL', '149', '558', '94', '147', '27', '2', '27'],
 ['Cabrera, Miguel', 'DET', '148', '555', '103', '193', '26', '1', '44'],
 ['Posey, Buster', 'SF', '148', '520', '61', '153', '34', '1', '15'],
 ['Suzuki, Ichiro', 'NYY', '150', '520', '57', '136', '15', '3', '7'],
 ['Holliday, Matt', 'STL', '141', '520', '103', '156', '31', '1', '22'],
 ['Headley, Chase', 'SD', '141', '520', '59', '130', '35', '2', '13'],
 ['Cabrera, Asdrubal', 'CLE', '136', '508', '66', '123', '35', '2', '14'],
 ['Pierzynski, A.J.', 'TEX', '134', '503', '48', '137', '24', '1', '17'],
 ['Hoes, L.J.', 'HOU', '46', '167', '24', '48', '7', '2', '1'],
 ['Young Jr., Eric', 'COL', '57', '165', '22', '40', '9', '3', '1'],
 ['Hairston, Scott', 'CHC', '52', '99', '13', '17', '2', '0', '8'],
 ['Arnaud, Travis', 'NYM', '31', '99', '4', '20', '3', '0', '1'],
 ['Ankiel, Rick', 'NYM', '20', '66', '7', '12', '4', '1', '2'],
 ['Ankiel, Rick', 'HOU', '25', '62', '6', '12', '3', '0', '5'],
 ['den Dekker, Matt', 'NYM', '27', '58', '7', '12', '1', '0', '1'],
 ['Sanchez, Angel', 'CWS', '1', '2', '0', '0', '0', '0', '0']]

相关问题 更多 >