使用 Swift 读取文本文件的 pythonic 方式



我知道 Python,我正在尝试学习 Swift... 我正在尝试弄清楚如何从绝对文件路径读取纯文本文件

在 Python 中,

#!/usr/bin/python
path= '/users/mu/desktop/test_file.txt'    
in_file= open(path,'w').read() #Open the file for reading
for line in in_file.split('n'): #Split it by line breaks and print the lines
    print line

试过这个: 斯威夫特 - 读取文件得到:"String.Type 没有成员名称 stringWithContentOfFile"

在Python中,这很容易。 必须有一种非常简单的方法来读取文本文件并创建由换行符分隔的字符串列表。

我的问题是如何读取文本文件,以便您可以遍历这些行

一旦我阅读了文件,我就可以:

for line in in_file
    {
    println(line)
    }

您可以使用 NSFileManager 和 NSString 来解析这些行例如:

    var path = "somePath"
    let fileManager = NSFileManager.defaultManager()
    let data:NSData = fileManager.contentsAtPath(path)!
    var strs = NSString(data: data, encoding: NSUTF8StringEncoding)

寻找一种pythonic的方式来用一种不是Python的语言做某事往往注定要失败。结合各种标准库,Python 的字符串处理能力远远超过了 Swift,你只需要习惯这一点。但是,在最简单的情况下,解析文件中的行仍然非常简单。有很多方法可以做到这一点,但是一旦你得到字符串,下面的方法就可以在一次调用中完成它:

import Foundation
import Cocoa
let filepath = "/Users/yourname/Desktop/greatspeeches.txt"
// 1. Safely load the string
var error: NSError?
let contents = NSString(contentsOfFile: filepath,
    encoding: NSUTF8StringEncoding,
    error: &error)
if let contentsString = contents {
    // 2. Enumerate the lines in the string
    contentsString.enumerateLinesUsingBlock({ (line, stopEarly) -> Void in
        println(line)
    })
} else if let err = error {
    println(err.localizedDescription)
}

和你一样,我从Python来到Objective-C/Swift,最初对上面任务的明显难度感到沮丧。但是,一旦您习惯了它,这里遇到的不便就会被您可以将复杂的Mac应用程序组合在一起的便利性所抵消。

我正在寻找同样的东西并找到了以下解决方案。唯一的缺点是文件不是逐行读取,而是一次读取,然后分成几行。这个答案比公认的答案短一点,因此对我来说似乎更像"蟒蛇"。

import Foundation
let fileName = "file.txt"
let fileContents = try! String(contentsOfFile:fileName)
let lines = fileContents.components(separatedBy: "n")
for line in lines {
   print(line)
}

这在终端中运行良好(使用 Swift 版本 3.0.2 测试)。

最新更新