在python中将某些行写入文件

时间:2010-08-19 16:19:14

标签: python

我有一个名为fulldataset的大文件。我想从fulldataset写一个名为newdataset的新文件。我只想写一些来自fulldataset的行,虽然它包含listfile中存在的id号。此外,所有id号都以XY开头。 id号出现在每行的中间。

以下是列表文件中的示例行:

Robert, Brown, "XY-12344343", 1929232, 324934923, 

这是我到目前为止的程序。它运行正常,但不会在新文件中写入任何内容。

datafile = open('C:\\listfile.txt', 'r')
completedataset = open('C:\\fulldataset.txt', 'r')
smallerdataset = open('C:\\newdataset.txt', 'w')

matchedLines = []

for line in datafile:
    if line.find("XY"):
        matchedLines.append( line )

counter = 1
for line in completedataset:
    print counter
    counter +=1

    for t in matchedLines:
        if t in line:
            fulldataset.write(line)
            del line
            break

datafile.close()
completedataset.close()
fulldataset.close()

编辑:

好的,这是新计划:

datafile = open('C:\\tryexcel33.txt', 'r')
completedataset = open('C:\\fulldataset.txt', 'r')
smallerdataset = open('C:\\newdataset.txt', 'w')


counter = 1
for line in completedataset:
    print counter
    counter +=1

    if any( id in line for id in datafile ):
        smallerdataset.write( line )
        break

datafile.close()
completedataset.close()
fulldataset.close()

我仍然没有写入新文件的任何内容。我认为一个问题可能是在完整文件中id号有一个“在它们前面,但这在listfile中不存在。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不明白你的代码。这是执行您所要求的代码:

ids = set( datafile.readlines( ) )
for line in fulldataset:
    if any( id in line for id in ids ):
        smallerdataset.write( line )

编辑:我用不完整的数据尽我所能。 fulldataset中的ID以XY为前缀的事实是无关紧要的,因为我们无论如何都在搜索整个字符串("foo" in "XY-foo"仍然是真的)。如果没有写入行,那是因为datafile的行不完全是ID。请从datafile发布样本。

您还在重复使用变量line,这将使您的代码以神秘的方式出错。

您还有一个break语句,最多会写入一行。为什么呢?


修改

很多道歉,我只是重新阅读代码 - 出于某种原因我假设datafile是一个列表。它实际上是一个文件,所以我以前的代码不起作用。请参阅固定代码。