如何从文本文件中逐行读取并使用python传递值

时间:2015-07-08 14:19:48

标签: python python-2.7 request

我有一个文件“BatchLink.txt”,其中包含新行中的网址。我想按行读取这些行并将参数按行传递给批处理脚本。

假设我的batchlink.txt包含以下数据: -

http://link1
http://link2
http://link3
http://link4

现在,我想逐行阅读,并将其一次发送到一个批处理文件。这个问题是我上一个问题Here的延续。 现在,我有这个代码: -

import requests
from bs4 import BeautifulSoup
import subprocess 

file = open("BatchLinks.txt", "w")
r = requests.get('http://www.crunchyroll.com/i-cant-understand-what-my-husband-is-saying')
soup = BeautifulSoup(r.text)
print soup.title
subtitles = soup.findAll('div',{'class':'wrapper container-shadow hover-classes'})
for episode in subtitles:
  x = episode.find_all('a')
  for a in x:
   #print a['href']

   z = a['href']

  l = 'http://www.crunchyroll.com'+ z
  print l
  file.write(l+'\n')

print '-----------------------------------------------------------------------------'

file.close()

file = open('BatchLinks.txt', "r")
lines = file.readlines()
print lines

if __name__ =="__main__":
    response = lines
    print(lines)
    p = subprocess.Popen("_start.bat", stdin = subprocess.PIPE)
    time.sleep(1)

    p.stdin.write(response) #Answer the question

    time.sleep(20)

但是,现在,问题是它同时读取行并将其发送到批处理文件。它返回输出[]。我似乎无法让它工作。任何帮助/指导将不胜感激。

4 个答案:

答案 0 :(得分:2)

file = open('BatchLinks.txt', "r")
lines = file.readlines()

将其更改为更新版本:

with open('BatchLinks.txt', "r") as inf:
    for line in inf:
        do something with line

答案 1 :(得分:0)

file = open('BatchLinks.txt', "r")
lines = file.readlines()

将其更改为更新版本:

with open('BatchLinks.txt', "r") as inf:
    for line in inf:
        do something with line

这是非常基本的东西。使用手册! https://docs.python.org/2/library/stdtypes.html#file-objects

答案 2 :(得分:0)

当你执行 - lines = file.readlines()时 - 它会读取文件中的所有行并将其作为列表返回,因此lines是文件中所有行的列表。

然后你正在做 - p.stdin.write(response) - 这会将完整列表发送到另一个进程,你应该遍历lines并将每一行发送到一个新进程。

示例 -

if __name__ =="__main__":
    for line in lines:
        print(line)
        p = subprocess.Popen("_start.bat", stdin = subprocess.PIPE)
        time.sleep(1)

        p.stdin.write(line.strip())

       time.sleep(20)

答案 3 :(得分:0)

我看到两个问题:您需要逐行写入管道,并且需要在完成后关闭管道。

替换以下行:

p.stdin.write(response) #Answer the question

这一个:

for line in response:
    p.stdin.write(line)
p.stdin.close()