我的家庭作业遇到了问题。 在文本文件中,包含以下内容:
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。 对于上下文(如有必要): 我的最终目标是从列表“忽略”中删除单词,并从另一个列表中删除这些单词。
让我知道您需要什么其他信息来帮助我。感谢您的宝贵时间。
答案 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...