在Python中同时处理两个文件

Ope*_*way 4 python string

我有关于12340辆汽车的信息.此信息按顺序存储在两个不同的文件中:

  1. car_names.txt,其中包含一行代表每辆车的名称
  2. car_descriptions.txt,其中包含每辆车的描述.因此每行40行,第6行读取@CAR_NAME

我想在python中做:在car_descriptions.txt文件中为每辆车添加第7行中的每辆车的名称(来自其他文件)(它是空的),就在@CAR_NAME之后

我想过:

1)读取第一个文件并将汽车名称存储在矩阵/列表中2)开始读取第二个文件,每次找到字符串@CAR_NAME时,只需在下一行写下名称

但我想知道是否有更快的方法,所以程序每次从每个文件读取一行并进行修改.

谢谢

Rob*_*ney 9

首先,制作一个从序列中检索汽车名称的发电机.你可以每7行产生一次; 我已经让我的产量跟随以下行开头的行@CAR_NAME:

def car_names(seq):
    yieldnext=False
    for line in seq:
        if yieldnext: yield line
        yieldnext = line.startswith('@CAR_NAME')
Run Code Online (Sandbox Code Playgroud)

现在您可以使用itertools.izip并行浏览两个序列:

from itertools import izip
with open(r'c:\temp\cars.txt') as f1:
    with open(r'c:\temp\car_names.txt') as f2:
        for (c1, c2) in izip(f1, car_names(f2)):
            print c1, c2
Run Code Online (Sandbox Code Playgroud)

  • 我测试了我发布的代码.如果您可以推断我的机器运行Windows会让您感到麻烦,我建议您躺在一个安静,黑暗的房间里,用一块凉爽的湿毛巾擦拭眼睛,直到感觉过去. (18认同)
  • 哇,对我的问题多么热烈的回复!看起来你需要比我更酷的毛巾!无论如何,我的评论只是一个悲伤的注释:Windows用户往往认为每个人都是Windows用户.您可以使用同一目录中的文件测试您的脚本(就像其他人一样http://stackoverflow.com/questions/1731102/process-two-files-at-the-same-time-in-python/1731180#1731180或者你可以用`filename`抽象出路径.改善你的答案,而不是咆哮! (2认同)
  • 毕竟,你是在完全无关紧要的问题上发表评论.接下来,当有人使用"fizz"和"buzz"作为临时变量名称时抱怨,因为"foo"和"bar"是标准的? (2认同)

edu*_*ffy 8

我不确定我是否完全明白你想要做什么,是这样的?

f1 = open ('car_names.txt')
f2 = open ('car_descriptions.txt')
for car_name in f1.readlines ():
        for i in range (6):   # echo the first 6 lines
                print f2.readline ()
        assert f2.readline() == '@CAR_NAME'  # skip the 7th, but assert that it is @CAR_NAME
        print car_name    # print the real car name
        for i in range (33):  # print the remaining 33 of the original 40
               print f2.readline ()
Run Code Online (Sandbox Code Playgroud)