如何将.txt文件中的列表转换为处理(python)中的列表?

时间:2019-04-01 01:13:44

标签: python processing

我的家庭作业遇到了问题。 在文本文件中,包含以下内容:

ignored = ["the", "a", "an", "i", "me", "you", "with", "this"]

(实际内容要长得多,但为简单起见,我将其缩短了。)

我希望.txt文件中显示的列表成为我的处理应用程序中的列表。

我尝试使用.strip和.split使其工作:

size(500,500)
ignored = []
g = open("ignored.txt", "r")

for line in g:
    line = line.strip('ignored')
    line= line.strip()
    line = line.strip("=")
    line = line.strip()

    line = line.strip("][")

    line = line.split(", ")

    print(line)
    ignored.append(line)

ignored.pop()
print(ignored)

我已经尝试过将.strip或.split进行多种组合,但是我的打印输出始终是这种或类似的东西。

[['"the"', '"a"', '"an"', '"i"', '"me"', '"you"', '"with"', '"this"']]

我希望我的最终清单没有多余的引号和括号。就像是: [“ the”,“ a”,“ an”,“ i”,“ me”,“ you”,“ with”,“ this”]

我无法找到一种方法来完成这项工作,并且我认为有一种更简单的方法。

我无法导入任何东西,并且我正在使用最新版本的Processing。 对于上下文(如有必要): 我的最终目标是从列表“忽略”中删除单词,并从另一个列表中删除这些单词。

让我知道您需要什么其他信息来帮助我。感谢您的宝贵时间。

9 个答案:

答案 0 :(得分:2)

您可以使用正则表达式(import re):

my_list = re.findall(r'"(\w+)"', line)
ignored.append(my_list)

这样,您将获得for循环中每一行的列表。或者,您可以这样:

ignored = re.findall(r'"(\w+)"', g.read())

使用此简单行,您可以获取文件中""之间的所有内容的列表。

答案 1 :(得分:1)

由于要加载的文件中包含实际的Python代码,因此获取文件的一种方法是复制或重命名文件,然后将其导入。显然,通常不建议这样做,如果确实有些困难,但是在这种情况下,作业似乎会假设您会做类似的事情。

import shutil

shutil.copy('ignored.txt', 'ignored.py')
from ignored import ignored

print(ignored)

除了不安全之外,它还有一个缺点,就是告诉您它无法像大多数IDE一样从检查这些内容的编辑器中找到被忽略的模块。另一个简单但又不太安全的解决方案是,不导入文件就将文件内容评估为Python。

ignored = []

with open('ignored.txt', 'r') as f:
    content = f.read()
    exec(content)

print(ignored)

一个更安全,可以说是更好的解决方案是解析文件的内容,并仅选择要使用的元素。但是,除了像您的示例那样手动进行操作之外,您还可以使用正则表达式来获取所需的内容-假设它只包含一行与您提供的内容类似:

import re

with open('ignored.txt', 'r') as f:
    content = f.read()
    ignored = [match.group(1) for match in re.finditer('[\'"](.*?)[\'"]', content)]

print(ignored)

答案 2 :(得分:0)

尝试以下操作:

ignored = []
g = open("text.txt", "r")

for line in g:
    start_index = line.find('[') + 1
    end_index = line.find(']')
    l = line[start_index:end_index]
    l = l.replace('"', '')
    l = l.split()
    ignored.extend(l)
print(ignored)

答案 3 :(得分:0)

使用此代码应该非常简单:

import ast
with open("ignored.txt", "r") as f:
    f = f.read().strip("ignored = ")

    print(ast.literal_eval(f))

Out[0]: ['the', 'a', 'an', 'i', 'me', 'you', 'with', 'this']

请注意,使用with open()通常会更好,更简洁,因为使用完文件后,它会自动关闭文件,释放所有浪费的内存。否则,请确保在读取或写入文件后运行f.close()

答案 4 :(得分:0)

看起来您只需要再次使用strip从文本文件中删除引号即可。

此外,在使用split(“,”)之前,使用find()从输入中定位[]的代码可能更少。

答案 5 :(得分:0)

最好将正则表达式用于此类文本解析任务。这是解析文本的最佳工具。下面是在txt文件中提取列表的示例代码:

import re

with open('test.txt', 'rb') as f:
    line = f.readline()
    pattern = '"(.*?)"' # this means: any characters between double quotation marks
    ignored = re.findall(pattern , line) # this method returns a list of strings that match pattern

上面的代码中的一些假设:

  • 您的txt文件称为test.txt,该文件只有1行,并且该行包含列表。

  • 您的列表是一个字符串列表,每个字符串都位于一对双引号内。

re是Python中的内置模块,因此无需安装任何第三方库。可以在here中找到有关正则表达式的更多信息。

答案 6 :(得分:0)

我能够通过以下方式做到这一点:

prev_work = Work(chapter=self.chapter, job=self.job, prev_work=self)
prev_work.save()

或与此

text1='''ignored = ["the", "a", "an", "i", "me", "you", "with", "this"]'''

list1=text1.split('[')[-1][:-1].replace('"','').split(',')
print(list1)
Out: ['the', ' a', ' an', ' i', ' me', ' you', ' with', ' this']

我只是对您的文本行进行了硬编码以使其易于测试。

答案 7 :(得分:0)

ignored = [[“ the”,“ a”,“ an”,“ i”,“ me”,“ you”,“ with”,“ this”]

with open("ignored.txt", "r") as f:
    for line in f:
        if line.startswith('ignored = ['):
            list = line.replace('ignored = [','').replace(']').replace('"', '').strip(',')
        print list

答案 8 :(得分:-1)

使用替换:

line.replace('"','').replace('[','') etc...