TypeError: expected string oder buffer mit re.Spiel und matchObj.Gruppe()

Ich erhalte die Fehlermeldung:

Traceback (most recent call last):
  File "ba.py", line 13, in <module>
    matchObj = re.match(r"^(\w+ \w+) batted (\d+) times with (\d+) hits and (\d+) runs", line)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 137, in match
    return _compile(pattern, flags).match(string)
TypeError: expected string or buffer 
  1. line verwenden sollten line.strip zu Lesen, jede Zeile in der Datei

  2. re.match regex verwendet, um zu schauen, Spiele zu 3 Gruppen (players, hits, atBats) in der Zeichenfolge

  3. matchObj.group() sollten, Lesen Sie jede Gruppe und legen die Statistiken, wo Sie gehen in playerStats{} Wörterbuch

Wie bekomme ich re.match-Attribut einen Typ, der matchObj, damit ich ziehen kann, mit group() und fügen Sie zu playerStats()?

   import re, sys, os

if len(sys.argv) < 2:
    sys.exit("Usage: %s filename" % sys.argv[0])

filename = sys.argv[1]

if not os.path.exists(filename):
    sys.exit("Error: File '%s' not found" % sys.argv[1])

playerStats = {'players': (0, 0, 0)} 

matchObj = re.match(r"^(\w+ \w+) batted (\d+) times with (\d+) hits and (\d+) runs", line)

with open(filename) as f:
    for line in f:
        line = line.strip()

    if player in playerStats:
        playerStats[players][0] += atBat
        playerStats[players][1] += hit

    if player not in players:
        player = matchObj.group(1)
        playerStats[players][0] = atBat
        playerStats[players][1] = hit
        avgs = 0

    else: 
        playerStats[players] = player
        playerStats[players][0] = atBat
        playerStats[players][1] = hit
        playerStats[players][2] = 0

    try:
        player = matchObj.group(1)
        atBat = matchObj.group(2)
        hit = matchObj.group(3)

        except AttributeError as ae:
            print str(ae), "\skipping line:", line
        except IndexError as ie:
            print str(ie), "\skipping line:", line

#calculates averages
    for players in playerStats:
        avgs[player] = round(float(hits[player])/float(atBats[player]), 3) 

    print "%s: %.3f" % (player, avgs[player])
Hmm, Nein, das ist nicht, wie Sie verwenden re.match. Die Art und Weise Sie es geschrieben, Sie sind auf der Suche nach Ihren regulären Ausdruck in das Zeichenfolgenliteral "Linie", nicht in der variable line. Da die Zeichenfolge nicht mit der re, dann re.match() gibt Keine, daher der Fehler. Prüfen Sie hier: tutorialspoint.com/python/python_reg_expressions.htm
Ich editiert oben, ursprünglich hatte ich es als Linie, nicht die "Linie" aber ich bekomme die Fehlermeldung, dass das jetzt eingefügt, an der Spitze dabei. Ist die Zeile nicht um einen string nach Zeilen.Streifen?

InformationsquelleAutor Virge Assault | 2014-10-06

Schreibe einen Kommentar