【问题标题】:Use data from different files with same names but different extensions to get the line numbers使用来自具有相同名称但不同扩展名的不同文件的数据来获取行号
【发布时间】:2016-02-19 04:22:08
【问题描述】:

我使用以下代码:

 from collections import defaultdict
 import sys
 import os
 for doc in   os.listdir('path1'):
doc1 = "path1" + doc
doc2 = "path2" + doc

doc3 = "path3" + doc
with open(doc1,"r") as words:
    sent = words.read().split()
        print sent
    linenos = {}

    with open(doc2, "r") as f1:
            for i, line in enumerate(f1):
                for word in sent:
                        if word in line:
                            if word in linenos:
                                    linenos[word].append(i + 1)
                            else:
                                    linenos[word] = [i + 1]

    matched2 = []
    for word in sent:
            if word in linenos:
                matched2.append('%s %r' % (word, linenos[word][0]))
            else:
                matched2.append('%s <does not exist>' % word)
    with open(doc3,"w") as f1:
        f1.write( ', '.join(matched2))

所以,我的 path1 包含 file1.title、file2.title 等文件...直到 file240.title

同样,我有 path2,其中包含 file1.txt、file2.txt 等文件......直到 tile240.txt

例如:

file1.title 将包含如下数据:

military  troop deployment number need  

file1.txt 将有:

foreign 1242
military 23020
firing  03848
troop 2939
number 0032
dog 1234
cat 12030
need w1212

输出:

path3/file1.txt

military 2, troop 4, deployment <does not exist>, number 5, need 8

基本上,代码获取file1.txt中存在的单词的行号,并从file1.title输入单词。它适用于单个文件,例如一次输入单个文件。但我需要为一个装满文档的文件夹完成此操作。

也就是说,它应该从 file1.title 中读取单词并从 file1.txt 中获取单词的行号,类似地,从 file2.title 中读取单词作为字符串并从 file2.txt 中获取这些单词的行号,然后等等..

问题是,我无法使用此代码读取具有不同扩展名的相同文件。我应该如何修改它以获得适当的输出?

【问题讨论】:

  • 没有。我不想重命名,而是使用两个具有不同扩展名的文件来获取行号
  • 当问一个关于 SO 的问题时,试着把它归结为一个简短的、自包含的例子。大部分代码和解释与你的实际问题无关。
  • 对不起.. 我还在学习掌握 stackoverflow。以后我这里改一下。

标签: python python-2.7 line extract


【解决方案1】:

你想做这样的事情吗?

import os

for name in set([fname.split('.')[0] for fname in os.listdir('.') if fname.split('.')[1] in ['txt', 'title']]):
    f1 = open(''.join([name, '.txt'])).read()
    f2 = open(''.join([name, '.title'])).read()
    # Do whatever with the file contents

【讨论】:

  • 我想剥离扩展并执行必要的功能。上一个答案是我想要的。感谢您的宝贵时间
【解决方案2】:

我猜你是要求替换文件名字符串中的扩展名,如下所示:

doc2 = "path2" + doc[:-6] + ".txt"

这会从doc 中删除 6 个字符“.title”并添加扩展名“.txt”。

【讨论】:

    【解决方案3】:

    我认为你只需要在 open(docx, 'w') 上写下文件的全名。例如将 doc1 替换为“file1.title”,将 doc2 替换为“file1.txt”,我不知道您是否正在这样做,但是当您调用文件时,扩展名很重要。

    【讨论】:

    • 我希望对一个充满文件的文件夹执行此过程,而不是一次对单个文件执行此过程。它适用于单个文件
    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2019-11-24
    • 2021-11-15
    • 1970-01-01
    • 2011-05-16
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多