2016-04-07 22 views
0

Bir dosyadan veya stdin'dan girdi kabul eden ve bunları dosya benzeri bir nesneyi girdi olarak alan pandalar read_csv kullanarak ayrıştıran bazı ayrıştırma komut dosyalarına sahibim.Python'da stdin'i sıfırlayın veya yeniden okuyun mu?

Bazen üstbilgi farklıdır, bu yüzden dosyayı okumaya çalışmak için denemeyle ayarlanmıştım, ancak ayrıştırılamıyorsa, alternatif bir başlık belirtimiyle deneyin.

Bu, dosyalar için çalışır, ancak giriş olarak stdin kullanırsam, başlık satırının, ilk denemeyle read_csv'da "tüketildiği" anlaşılıyor.

Bu satırı tampon veya pandalar gibi olacak şekilde, ayrıştırma ikinci bir girişim için stdin sıfırlamak için bir yol olup olmadığını merak ediyorum.

emin değil örnek kod yardımcı olabilir, ancak olacaktır:

if Opt.Args: 
    FileName = Opt.Args[0] 
    print >> sys.stderr, "READING from FILE",FileName 
elif not sys.stdin.isatty(): 
    print >> sys.stderr, "READING from STDIN" 
    FileName = sys.stdin 

try: 
    df = pd.read_csv(FileName,header=0,sep="\t", parse_dates=['RecordedDate']) 
except ValueError: 
    try: 
     df = pd.read_csv(FileName,header=0,sep="\t",parse_dates=['RecordedDate_10']) 
...etc... 

cevap

1

Stdin "reset" için tek bir mükemmel yolu yok değil, farklı işletim sistemlerinde çalışır en azından bir tane. Ancak, STDIN'i "rebinding" yapmayı deneyebilirsiniz ve pratik olarak temizler.

unixoid sistemlerde

, böyle bir şey işe yarayabilir:

ithalat sys
text = sys.stdin.read()
sys.stdin = open ("/ dev/tty") sel = raw_input ("Seçim:?")

bakın: http://www.gossamer-threads.com/lists/python/python/467361