python - 如何逐行读取并从python中的文件中解析?

标签 python parsing readline

如何在python中逐行读取并从文件中解析?

我是 python 新手。

第一行输入是模拟次数。 下一行是行数 (x),后跟一个空格,然后是列数 (y)。 下一组 y 行将包含 x 个字符,单个句点 ('.') 代表空格,单个大写字母“A”代表起始代理。

我的代码出错了

Traceback (most recent call last):
    numSims = int (line)
TypeError: int() argument must be a string or a number, not 'list'

感谢您的帮助。

输入.txt

2   --- 2 simulations
3 3  -- 3*3 map
.A.  --map
AA.
A.A
2 2  --2*2 map
AA  --map
.A
def main(cls, args):
    numSims = 0
    path = os.path.expanduser('~/Desktop/input.txt') 
    f = open(path) 
    line = f.readlines() 
    numSims = int (line)
    print numSims
    k=0
    while k < numSims:
        minPerCycle = 1
        row = 0
        col = 0
        xyLine= f.readLines()
        row = int(xyLine.split()[0]) 
        col = int(xyLine.split()[1])
        myMap = [[Spot() for j in range(col)] for i in range(row)] 
        ## for-while
        i = 0
        while i < row:
            myLine = cls.br.readLines()
            ## for-while
            j = 0
            while j < col:
                if (myLine.charAt(j) == 'B'):
                    cls.myMap[i][j] = Spot(True)
                else:
                    cls.myMap[i][j] = Spot(False)
                j += 1
            i += 1

对于 Spot.py

点.py

class Spot(object):
isBunny = bool()
nextCycle = 0
UP = 0
RIGHT = 1
DOWN = 2
LEFT = 3
SLEEP = 4

def __init__(self, newIsBunny):
    self.isBunny = newIsBunny
    self.nextCycle = self.UP

最佳答案

你的错误很多,这是我目前发现的错误:

  1. numSims = (int)line不做你认为它做的事。 Python 没有 C 转换,您需要调用 int改为输入:

    numSims = int(line)
    

    您稍后使用大写拼写 Int 来复合此错误:

    row = (Int)(xyLine.split(" ")[0])
    col = (Int)(xyLine.split(" ")[1])
    

    以类似的方式更正这些:

    row = int(xyLine.split()[0])
    col = int(xyLine.split()[1])
    

    因为默认为 .split()是在空格上拆分你可以省略 " "争论。更好的是,将它们合并成一行:

    row, col = map(int, xyLine.split())
    
  2. 你永远不会增加 k , 所以你的 while k < numSims:循环将永远持续下去,所以你会得到一个 EOF 错误。使用 for循环代替:

    for k in xrange(numSims):
    

    您不需要使用 while在这个函数的任何地方,都可以用for variable in xrange(upperlimit):代替循环。

  3. Python 字符串没有 .charAt方法。使用 [index]相反:

    if myLine[j] == 'A':
    

    但是自myLine[j] == 'A'是一个 bool 测试,你可以简化你的 Spot()像这样实例化:

    for i in xrange(row):
        myLine = f.readLine()
        for j in xrange(col):
            cls.myMap[i][j] = Spot(myLine[j] == 'A')
    
  4. 在 Python 中不需要如此多地初始化变量。您可以获得大部分 numSims = 0col = 0行等,如果您要在下一行分配新值。

  5. 您创建了一个 'myMap variable but then ignore it by referring to cls.myMap` 代替。

  6. 这里没有处理多重映射;文件中的最后一张 map 将覆盖之前的任何 map 。

重写版本:

def main(cls, args):
    with open(os.path.expanduser('~/Desktop/input.txt')) as f:
        numSims = int(f.readline())
        mapgrid = []
        for k in xrange(numSims):
            row, col = map(int, f.readline().split())  
            for i in xrange(row):
                myLine = f.readLine()
                mapgrid.append([])
                for j in xrange(col):
                    mapgrid[i].append(Spot(myLine[j] == 'A'))
         # store this map somewhere?
         cls.myMaps.append(mapgrid)

关于python - 如何逐行读取并从python中的文件中解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12611695/

相关文章:

python - Heroku 推送被拒绝,无法编译 Python/django 应用程序 (Python 2.7)

Python 和 Selenium - 关于此代码的作用的任何建议

java - 检查字符串是否可以解析为另一种 Java 类型

java - 使用 readline() 和 split()

c# - StreamReader.ReadLine 在使用\r 作为行终止符时无法通过 TCP 工作

c - C 中的 Readline 函数输出奇怪的结果

python - 将一个 numpy 数组取另一个数组的子集

python - 如何减去两个矩形?

file - 如何很好地阅读 "alternating"行?

java - 无法使用 document.getElementById 获取元素,返回 null