【问题标题】:Python Reading file error with arrayPython用数组读取文件错误
【发布时间】:2013-10-09 01:51:26
【问题描述】:

我的文件:

Offices 10
MedicalOffice 15
PostOffice 30
Mall 200

如何让 python 只读取第二列。 喜欢得到:

10
15
30
200

我已经尝试过可能的方法来让它只读取 10、15、30 等...而不是名称。我试过这个没有名字,它工作正常。但我需要在文本文件中包含名称。有什么帮助吗?谢谢

def something(file1):
    with file1 as f:
        nums = [int(line) for line in f]
        print("Read from File: ", nums)


textFileName = input("Enter the filename: ")
file1 = open(textFileName)
something(file1)

谢谢。

【问题讨论】:

  • 这是第二个。第二个MedicalOffice 15
  • @abarnert 很好。我的错字。感谢您的提醒!
  • 是的,我认为这只是一个错字,但最好是修正它而不是让未来的读者感到困惑……
  • 同时,您可能不想在顶层执行open,在函数内部执行with。只要您在这种情况下只调用something,这基本上可以工作,但这很奇怪。通常,您希望 open 直接在 with 语句中。 with open(textFileName) as file1: something(file1)something 没有with,或者只有something(textFileName)something 内部,它在with 中打开文件。 (这很难在评论中解释;希望你明白吗?)

标签: python arrays file


【解决方案1】:

要读取第二列,拆分行并取第二个字段:

[x.split()[1] for x in open(textFileName,"r")]

如果你想要数字,只需调用 int:

[int(x.split()[1]) for x in open(textFileName,"r")]

【讨论】:

  • 为什么在此处添加.readlines()?它不在最初的问题中,它所做的只是让程序使用更多的内存和更多的 CPU(以及更多的打字)而没有任何好处。
【解决方案2】:

你不能只看第二栏。

但是您可以阅读这两列,忽略第一列,而只使用第二列。

例如:

def something(file1):
    with file1 as f:
        lines = (line.partition(' ') for line in f)
        nums = [int(line[-1]) for line in lines)
        print("Read from File: ", nums)

我分两步完成此操作,只是为了更容易看到新的部分(partition)与您已有的部分(int)。如果您愿意,可以将它们全部塞进一个 listcomp:

        nums = [int(line.partition(' ')[-1]) for line in f]

无论如何,partition 在第一个空格处分割每一行,所以你会得到,例如,('Offices', ' ', '10')[-1] 是最后一部分,'10'。然后是int,你已经知道了。

【讨论】:

    【解决方案3】:

    类似于@Nirk 的回答,但改进了文件处理:

    with open('/path/to/file.txt', 'r') as f:
        nums = [x.strip().split()[-1] for x in f]
    

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多