Python3-用于fd中的ROW而不是行

时间:2018-11-22 11:39:04

标签: python

是否可以在一行中用“,”分隔内容并将其打印为单独的行

fd = open("data.txt", "r").readlines()

i = 0

for line in fd:
    line = line.lstrip().rstrip().split(", ")[i]
    print("Subject-%d: %s" % (i, line))
    print("Name-%d: %s" % (i, line))
    print("Fruit-%d: %s" % (i, line))
    i += 1

文本文件包含以下内容:

People, Zeref, Apple
Greeks, Zues, Apricot

基本上,我要代码执行的操作是将文本文件分隔为“,”,然后将每个文件打印到新行上,这样它就会显示出来

Subject-0: People
Name-0: Zeref
Fruit-0: Apple
Subject-1: Greeks
Name-1: Zues
Fruit-1: Apricot

出于某种原因它只是说

Subject-0: People
Name-0: People
Fruit-0: People
Subject-1: Greeks
Name-1: Greeks
Fruit-1: Greeks

2 个答案:

答案 0 :(得分:1)

line = line.lstrip().rstrip().split(", ")[i]

此行用逗号分隔行并采用第i个元素(它适用于i = 0,1,可能适用于2,但是一旦我变大,您将得到一个例外)

您实际上想做的是-

subject, name, fruit = line.lstrip().rstrip().split(", ")

然后打印每个变量,但更优雅的方法是使用csv reader

答案 1 :(得分:0)

您的代码当前不起作用的原因是,在您提供的示例中,您正在每行取一个固定项目(line = ...[i]),而在打印两次之间i不变不同的行。

假设您的文件始终包含相同的结构Subject, Name, Fruit,我将使用zip()遍历该行:

fd = open("data.txt", "r").readlines()
labels = ['Subject', 'Name', 'Fruit']

for line_num, line in enumerate(fd):
    line = line.lstrip().rstrip()
    for label, item in zip(labels, line.split(', '):
        print("%s-%d: %s" % (label, line_num, item))

此外,我将用“更现代的”版本代替您的印刷声明:

print(f'{label}-{line_num}: {item}')

或者如果您使用的版本<3.6

print('{}-{}: {}'.format(label, line_num, item)

但这主要是个人喜好。