我知道這是一個常見問題,但是使用Google搜索並沒有爲Mathematica提供明確的答案,所以我認爲在StackOverflow上使用它會很有價值。在Mathematica中將文件內容篡改爲字符串的最佳方法是什麼?
我一直在用Import來做這件事,但是對我來說這可能是非常低效的,導入是一個如此重量級的功能。
所以,問題是,你可以在以下改進:
slurp[filename_] := Import[filename, "Text"]
我知道這是一個常見問題,但是使用Google搜索並沒有爲Mathematica提供明確的答案,所以我認爲在StackOverflow上使用它會很有價值。在Mathematica中將文件內容篡改爲字符串的最佳方法是什麼?
我一直在用Import來做這件事,但是對我來說這可能是非常低效的,導入是一個如此重量級的功能。
所以,問題是,你可以在以下改進:
slurp[filename_] := Import[filename, "Text"]
用於一次導入整個文件,我所知道的唯一的其他選擇是ReadList
。它可以如下被哄騙到整個文件返回一個字符串:
In[1]:= ReadList["ExampleData/source", Record, RecordSeparators -> {}]
Out[1]:= {"f[x] (: function f :)\r\ng[x] (: function g :)\r\n"}
(注:\ r和\ n實際上是解釋執行的輸出,但我離開他們的可讀性)關鍵是要刪除任何RecordSeparators
。但是,我真的不認爲這可以爲您節省任何東西,並且Import[ <file>, "Text"]
更容易編寫。實際上,當我使用Read
和ReadList
中使用的類型說明符未涵蓋的格式數據時,我使用Read[ <file>, String]
,並圍繞此操作構建一個自定義函數以加載所有數據。
導入[file,「String」]使用此ReadList []語法吸入文件。速度方面,這些應該非常相似。 「文本」格式執行行結束標準化,也許處理字符編碼。 – 2010-10-14 23:34:14
@Joshua,我自己沒有看到底層代碼,我懷疑你對他們的相對速度是正確的。也就是說,用於將整個文件加載到字符串中的'Import'語法要簡單得多,因此通過它的使用不太可能引入錯誤。另一方面,我的數據通常是結構化的,但不是以「Import」,「Read」或「ReadList」處理的方式。所以,我傾向於隨時解析文件,而不是一次加載它們,然後進行解析。 – rcollyer 2010-10-15 02:55:56
您使用'Read'和'ReadList'聽起來非常合理。他們都採取數據類型的列表(如結構),你可能也會覺得有用。他們的二進制文件也是一樣的。 – 2010-10-15 12:53:05
與您的性能問題沒有直接關係,但是我需要幾次啜食XML數據並且幫助文件沒有幫助。我發現這一點,以防任何人需要它http://www.hostsrv.com/webMathematica/Resources/Documentation/English/indexE_5_1.html。我計劃發佈社區問題來構建Mathematica資源索引。那裏有很多東西,但太分散了。 – 2010-10-16 02:38:55