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

时间:2015-03-17 02:43:17

标签: python file cocoa parsing swift

我知道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

试过这个:Swift - Read Files 得到:“String.Type没有成员名称stringWithContentsOfFile”

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

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

读完文件后,我可以:

for line in in_file
    {
    println(line)
    }

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

寻找一种用非Python语言做某事的 pythonic 方式往往注定要失败。结合各种标准库,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应用程序放在一起轻松抵消。

答案 2 :(得分:1)

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

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版测试)。