python:将文本文件作为列表打开,并使用它们检索数据

时间:2012-10-18 19:39:01

标签: python list random python-3.x

我在打开和使用文本文件作为python中的列表时遇到问题...我需要在文本文件中使用字符串值(每个50个单词),三个文本文件......我需要使用每个文本文件中的随机单词,以便每次都产生侮辱......(莎士比亚侮辱那些知道的人)

  import random #Import my random

Column_picker = random.randint(0, 45) #Define my random between 0-50

with open("Column1.txt") as d:
    insults1 = list(d)

with open("Column2.txt") as f:
    insults2 = list(f)

with open("Column3.txt") as e:
    insults3 = list(e)

print("Thou", insults1[], insults2[], insults3[])

到目前为止,这就是我所拥有的,我感觉非常接近,我无法从列表中抓取正确的字符串..要么抓住整个列表,要么抓住它的一封信....

3 个答案:

答案 0 :(得分:3)

使用random.choice

import random

def random_word(filename):
    with open(filename) as file:
         return random.choice(file.readlines())

filenames = ["file.txt", "another.txt"]
print("Thou " + ' '.join(map(random_word, filenames)))

如果您需要多次获取行,也可以使用linecache.getline(filename, line_number)

答案 1 :(得分:0)

我假设每个侮辱都是文件中的一行,但如果readlines在第一行上以空格分隔,我们可以将readlines[0].split()替换为\n,我们可以添加一些内容来忽略{{1}但是这个想法仍然是一样的。

import random #Import my random

Column_picker = random.randint(0, 45) #Define my random between 0-50
with open("Column1.txt") as d:
    insults1 = d.readlines()

with open("Column2.txt") as f:
    insults2 = f.readlines()

with open("Column3.txt") as e:
    insults3 = e.readlines()

print("Thou", insults1[Column_picker], insults2[Column_picker], insults3[Column_picker])

答案 2 :(得分:0)

使用函数肯定更好:

def random_word(fname):
    line_num = random.randint(0, 45)
    with open(fname) as f:
        lines = f.readlines()
    return lines[line_num]

print("Thou",
     random_word("Column1.txt"),
     random_word("Column2.txt"),
     random_word("Column3.txt"))

最后一行甚至可以更清洁一点:

files = ['Column1.txt','Column2.txt','Column3.txt']
insults = [random_word(f) for f in files]
print ( "Thou "+' '.join(insults) )