【问题标题】:Python reading number of linesPython读取行数
【发布时间】:2019-05-16 16:54:03
【问题描述】:

我只是想查询将文本文件的行读回字典或类对象的最佳方法。

我写入文本文件的数据非常粗糙,所以我确信可能有更好的格式化方法。

基本上数据看起来像这样(--是我的 cmets):

Default_scene --this is the scene name 
0 -- start frame
10 --end frame
--this could be a filepath but is blank
2 --number of records in class object can vary but 2 here
Dave01: --record name 
Dave01: -- namespace
V:/assets/test.fbx --filepath for record
1 -- number of export sets (can vary)
Test:Default_scene_Dave01 0-10 --export set
Test01: --record name
Test01:--namespace
C:/test2.fbx --filepath
0--number of export sets

例如:如果我想将记录数据读回对象类,我将如何告诉读取行脚本读取接下来的 1 行甚至 2 行,具体取决于可能有​​多少导出集?

非常感谢!

【问题讨论】:

  • 您是否有任何理由不能打开文件并将所有行读入列表中,然后按照您认为合适的方式处理它们?
  • 另外,一旦你用f = open('filename.txt')打开了一个文件,你可以用f.readline()一次读取一行——或者你可以在for循环中遍历f依次读取每一行。
  • 有很多关于阅读文本文件的教程和示例。我们认为您有责任在此处发布之前进行善意尝试。
  • 抱歉,我目前不在我的机器旁,这是一个一直困扰着我的问题。如果我遇到任何问题,我会发布一些代码。干杯。

标签: python class readlines


【解决方案1】:

您首先阅读告诉您有多少导出集的行,然后阅读更多要处理的行。基于您的 cmets 的代码可能如下所示

with open("data.txt") as f:
    scene_name = next(f).strip()
    start_frame = int(next(f))
    end_frame = int(next(f))
    num_recs = int(next(f))
    for _ in range(num_recs):
        rec_name = next(f).strip()
        namespace = next(f).strip()
        fpath = next(f).strip()
        num_export_sets = int(next(f))
        export_sets = [next(f).strip() for _ in range(num_export_sets)]
        # ...

【讨论】:

  • 谢谢,我没有在 python 中做过这个,所以我想找一个很好的例子来说明如何去做。
  • @TeXaS_pEtE 我建议你阅读官方教程。它涵盖了读取文件的基础知识。
  • 官方教程?
【解决方案2】:

也许这样的东西可以工作,那么你就会把所有东西都放在一个列表中并且可以使用它:

lines = []
with open(filepath) as fp: 
   line = fp.readline()
   lines.append(line)
   while line:
       line = fp.readline()
       lines.append(line)

【讨论】:

  • 简单地使用 for line in fp: 是正常模式,它是 1 行对你的 5 .. 如果你想让每一行进入内存做 lines = fp.readlines()
  • 这与只调用open(filename).readlines() 甚至只是调用list(open(filename)) 有何不同。无论如何,我认为这不是 OP 所要求的,尽管这也很模糊,我们可能永远不会知道......
  • 我明白了。我遇到的问题是,从记录名称到(潜在)导出集名称的所有内容都与记录相关联。让我感到困惑的是,我如何确保它读取正确的记录详细信息,尤其是如果一条记录有 2 个导出集而一个没有导出集。
猜你喜欢
  • 1970-01-01
  • 2015-08-07
  • 2015-05-13
  • 2014-04-24
  • 1970-01-01
  • 2023-03-24
  • 2010-10-05
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多