【问题标题】:Reading from a file into a list and have each element go through the program从文件读入列表并让每个元素通过程序
【发布时间】:2012-12-11 13:34:37
【问题描述】:

对不起,如果标题令人困惑。我想要做的是读取一个文本文件(keywords.txt),然后拆分成一个列表。所以基本上可以说文件包含“iphone,钥匙,钱包,笔,文件夹”,我希望列表是[iphone,钥匙,钱包,笔,文件夹]。

有没有办法为每个元素设置一个变量。假设变量是查询。无论如何都要查询每个元素,以便它可以通过程序并为每个元素工作。下面是我的代码,它显然不起作用,但如果可能的话,这就是我想要发生的事情。

我想为每个元素执行此操作的原因是因为最终脚本将为每个元素编写一个新的文本文件,并根据元素是什么命名它,我知道如何做到这一点的唯一方法是一个变量。

data = [line.strip() for line in open('keywords.txt', 'r')]

try:
    query = sys.argv[1]
except IndexError:
    query = item in data 

这是我将要执行的其余代码。它将获取创建的列表中的内容并创建一个新的文本文件和一个 csv 文件。

newFile = open("%s.txt" %query, 'w').write(txt.encode('utf8'))

with open("%s.txt" %query, 'rb') as input_file:
    reader = csv.reader(input_file, delimiter='\n', quoting = csv.QUOTE_NONE)

    with open("%s.csv" %query, 'wb') as output_file:
        writer = csv.writer(output_file)

        for row in reader:
            writer.writerow(row)

【问题讨论】:

  • 提供实际输入和您的预期输出会很有用——这有助于澄清您的要求
  • 所以 - 如果 query 比如说 iphone 出现在文件中,那么您想要一个名为 iphone 的文件,其中包含 keywords.txt 中的内容?

标签: python list text-files


【解决方案1】:

将从命令行获取的query 值改为列表,然后循环查询列表:

try:
    query = [sys.argv[1]]
except IndexError:
    query = data

for q in query:
    # do something with q

【讨论】:

  • 除非我遗漏了一些东西,从一个项目中列出一个列表,仍然只给你一个项目,所以在查询中的项目上的 for 循环将只有一个项目。我不明白这是在做什么。
  • 非常感谢您的帮助。它接近我需要的东西,但是当我用我的其余代码运行它时,它并没有一一完成。在我的其余代码中,我正在为列表中的每个项目创建一个文本文件,但它只是为整个列表创建一个文本文件。关于如何解决这个问题的任何想法?
  • @Shmoe:创建一个包含更多详细信息的新问题。恐怕我不会读心术。
  • @InbarRose:它能够使用 either 一个元素列表或完整列表,而无需对命令行给出的那个元素进行特殊情况处理.
【解决方案2】:
def process_keywords_in_file(file_name):  
    with open(file_name) as f:
        for line in f:
            process(line.strip())

def process(keyword):
    #your code

如果你想用关键字的名字写一个新文件:

with open('%s.txt' % keyword, 'w') as fw:
    fw.write('content')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多