3

我有一个大约 12Mb 的文件,它具有以下类型

[["1",-154],["2",-100],["3",-28],["4",-66],["5",-222],["6",-309],["7",-196],["8",-50],["9",-53],["10",-209],["11",-355],["12",-350],["13",-269],["14",-264],["15",-392],["16",-513],["17",-515],["18",-434],["19",-418],["20",-505],["21",-592],["22",-559],["23",-422],["24",-384],["25",-539],["26",-716],["27",-713],["28",-593],["29",-534],["30",-647],["31",-813],["32",-857],["33",-711],["34",-582],["35",-594],["36",-700],["37",-721],["38",-600],["39",-487],["40",-490],["41",-589],["42",-630],["43",-502],["44",-365],["45",-340],["46",-403],["47",-420],["48",-291],["49",-136],["50",-98],["51",-218],["52",-285],["53",-198],["54",-52],["55",-58],["56",-213],["57",-334],["58",-301],["59",-195],["60",-195],["61",-324],["62",-470],["63",-465],["64",-378],["65",-381],["66",-546],["67",-734],["68",-767],["69",-695],["70",-683],["71",-804],["72",-991],["73",-1050],["74",-937],["75",-850],["76",-912],["77",-1041],["78",-1065],["79",-972],["80",-931],["81",-1030],["82",-1186],["83",-1233],["84",-1113],["85",-992],["86",-1051],["87",-1206],["88",-1299],["89",-1218],["90",-1112],["91",-1150],["92",-1287],["93",-1345],["94",-1239],["95",-1140],["96",-1147],["97",-1276],["98",-1363],["99",-1312],["100",-1206],["101",-1184],["102",-1297],["103",-1378],["104",-1297],["105",-1141],["106",-1113],["107",-1219],["108",-1325],["109",-1284],["110",-1147],["111",-1103],["112",-1179],["113",-1300],["114",-1262],["115",-1141],

我想使用 Mathematica 来清理它,删除引号之间的所有符号和数字,只用以下格式的空格分隔它们:

-154 -100 -28 -66 -222 -309 -196 etc…

我怎么能这样做?我对 Mathematica 相当陌生,关于“如何清理 HTML 文件”或“如何清理 ZIP 文件”的教程并没有很好地阐明我的问题。

4

3 回答 3

3

您可以尝试将其作为字符串导入,用 和 替换[{然后]}.Eval去掉每个元组的第一个元素Last@Tranpose

data = Import["your_data.txt"];
Last@Transpose@
  ToExpression[StringReplace[data, {"[" -> "{", "]" -> "}"}]]

当然,还有更好的方法可以做到这一点。斯莱特的想法也很有效。你会发现在 Mathematica 中确实有上百万种方法可以做这种事情。

于 2012-06-12T22:08:28.850 回答
3

Mathematica 确实支持正则表达式,以及一个通用的字符串操作包。类似于以下内容:

string = "[["1",-154],["2",-100],["3",-28],["4",-66]]"
StringSplit[string, "],["]

StringReplace[strings, RegularExpression["[\"[0-9]+\"]] -> " "]

您可能需要稍微尝试一下,但这就是想法。

于 2012-06-12T22:09:26.167 回答
2

这是另一种避免的方法ToExpression(理论上可以运行您不打算运行的代码):

Import["data.txt", "Text"];

StringSplit[%, {"[[", "],[", "]]", ","}][[2 ;; ;; 2]];

StringJoin[Riffle[%, " "]]

Export["out.dat", %, "Text"]
于 2012-06-13T17:23:08.497 回答