2016-04-13 1 views
0

Я имею дело с проблемой, когда я хочу извлечь имена запасов из текстового файла для использования в нескольких скриптах python, чтобы, если я добавлю один или несколько акций Мне не нужно изменять все файлы python.Извлечь информацию из файла txt для использования в качестве переменной в файле python

Мой файл stocks.txt является:

AAPL 
GOOG 
TSLA 

Если импортировать этот скрипт сохраняет a.txt, a.txt, P.txt, l.txt, G.txt и т.д.

Каждая буква занимает отдельную позицию. Как я могу изменить свой код так, чтобы он занимал AAPL, GOOG и TSLA?

Спасибо!

Мой уменьшенный сценарий:

import urllib2 
import time 
import datetime 
import os 

filePath = os.path.abspath('stocks.txt') 
openFile = open(filePath, 'r') 
stockToPull = str(openFile.read()) 

def pullData(stock): 
    try: 
     saveFileLine = "today_data\\" +stock+".txt" 

    except Exception, e: 
     print 'main loop', str(e) 

while True: 
    for eachStock in stockToPull: 
     pullData(eachStock) 
+1

Простое изменение 'ул (openFile.read())' 'становится openFile.readlines()' , –

+1

Не забудьте 'openFile.close()' потом – jDo

ответ

1

Ваш вопрос линия

stockToPull = str(openFile.read()) 

Это принимает все содержимое openFile в виде одной строки. Поэтому, когда вы перебирать stockToPull вы перебором строки, которая производит серию одиночных букв

Вместо этого используйте

stockToPull = openFile.readlines() 

file.readlines() производит список из всех строк в файле. Если файл особенно велик, или вы не хотите промежуточной переменной, вы можете также цикл непосредственно через файл как:

while True: 
    for eachStock in openFile: 
     pullData(eachStock) 

Некоторые другие несвязанных критики:

  • Как у вас есть код написано, то while True: создаст бесконечный цикл
  • данные из файлов часто имеют дополнительные \n или символы пробела, рассмотреть вопрос о добавлении pullData(eachStock.strip()) удалить эти
  • Как было отмечено в комментариях, вы н eglect, чтобы закрыть файл. Вы можете либо добавить явный оператор закрытия, либо использовать контекстный менеджер, как показано ниже.
  • Это может быть просто из-за ваш усеченную код, но типичная конвенция поставить определение функций перед любым исполняемым кодом (за исключение импорт)
  • Это один очень незначительный, я всегда видел, как except Exception as e:, который вещь более читаема
  • Используйте os.path.join() для создания строк пути к файлу. В качестве альтернативы здесь можно использовать сырые строки для предотвращения необходимости \\

Собираем все вместе

import urllib2 
import time 
import datetime 
import os 

def pullData(stock): 
    try: 
     saveFileLine = os.path.join("today_data", stock+".txt") 
    except Exception as e: 
     print 'main loop', str(e) 

filePath = os.path.abspath('stocks.txt') 
with open(filePath, 'r') as openFile: 
    for eachStock in openFile: 
     pullData(eachStock.strip()) 
+0

Большое вам спасибо! Работает как шарм :) – Rico

+0

@Rico, рад это услышать. Поскольку этот ответ решил вашу проблему, отметьте его как «принятый» – wnnmaw

+0

Сделано! Спасибо :) – Rico