【Wolfram语言】44 导入与导出

44 导入与导出

词汇表

函数 说明
Import[loc] 从外部位置导入
WebImageSearch["keyword"] 通过关键词在网络上获取图片
ResourceData["name"] Wolfram 数据库获取数据
SendMail[expr] 发送电子邮件
CloudExport[expr,format] 以特定格式导出到云端
Export[file,expr] 导出到文件
Printout3D[source,"service"] 将源发送到 3D 打印服务

到目前为止,所展示的内容都在 Wolfram 语言Wolfram 知识库中完成。

但有时需要从外部获取数据。

可以预见,它们往往不会像 Wolfram 语言内部的数据那样干净有序

------而且它们可能会随时发生变化。

导入

第一个例子,从联合国网站首页导入前面的文本。

可以使用函数 Import 来做到这一点。

导入联合国网站首页的文本版本:

wl 复制代码
In[]:=Import["https://un.org"]

原始输出内容较长,仅显示前几行:

结果是一个字符串,包含一些空行。

文本预处理

按行分割

先把字符串按换行拆分。

在换行处分割以获得字符串列表:

wl 复制代码
In[]:=StringSplit[Import["https://un.org"], "\n"]
清洗

使用字符串模式+规则进一步清洗:

wl 复制代码
StringReplace[StringSplit[Import["https://un.org"], "\n"], 
  Whitespace ~~ Whitespace .. -> " "] /. " " -> Nothing

现在看上去整洁多了。

多语言识别

识别每个字符串的语言:

wl 复制代码
In[]:=LanguageIdentify[%]

获取超链接

Import 允许你导入各种不同的元素。
Hyperlink 会获取网页上出现的超链接;

获取联合国网站首页的超链接列表:

wl 复制代码
In[]:=Import["https://un.org", "Hyperlinks"]

获取图像

"Images" 会获取图像。

获取维基百科主页上出现的图片:

wl 复制代码
In[]:=Import["https://wikipedia.org", "Images"]

网站图谱

作为更复杂的例子,下面是Stephen Wolfram个人网站链接的图谱。

为保持可管理性,我在每一层只取前 5 个链接,并且只深入 3 层。

计算网站部分超链接图:

wl 复制代码
In[]:=NestGraph[Take[Import[#, "Hyperlinks"], 5] &, "https://stephenwolfram.com", 3]

网站截图

如果想获取网页在浏览器窗口中的截图,可以使用 WebImage

获取当前 Wolfram 网站页面顶部的图片:

wl 复制代码
In[]:=WebImage["https://wolfram.com"]

可以对这张图像进行操作,例如替换颜色:

wl 复制代码
In[]:=ColorReplace[%,Black->Orange]

更多导入格式

Wolfram 语言可以导入数百种格式------包括电子表格、图像、音频、视频、几何、数据库、日志文件、PDF 等。
Import 会自动查看文件扩展名(.png.xls 等)来确定要做什么。

图片

从网站导入一张图片:

wl 复制代码
In[]:=Import["https://bkimg.cdn.bcebos.com/pic/faf2b2119313b07eca803d93f98c8\
62397dda04426ae?x-bce-process=image/format,f_auto/resize,m_lfit,limit_\
1,h_500"]

使用机器学习函数,进行人物识别:

wl 复制代码
In[]:=Classify["NotablePerson", %]

除了从网页导入,Import 也可以从存储在你计算机系统或 Wolfram 云中的本地文件导入。

网络图像搜索

Wolfram 语言不仅处理具体的网页和文件,还可以进行诸如搜索网络之类的操作。

使用关键词colorful birds在网络上搜索图像:

wl 复制代码
In[]:=WebImageSearch["bird", 4]

它们被识别为不同种类的鸟类:

wl 复制代码
In[]:=ImageIdentify /@ %

Wolfram 数据库

外部数据的一个重要来源是 Wolfram 数据库Wolfram Data Repository)。

该仓库中的数据来自许多地方------但都已设置为便于在 Wolfram 语言中使用。

你可以通过浏览 Wolfram 数据库来查看可用内容。

一旦找到想要的条目,只需使用 ResourceData["name"] 将其导入 Wolfram 语言

获取达尔文《物种起源》的全文,然后对其生成词云:

wl 复制代码
In[]:=WordCloud[ResourceData["On the Origin of Species"]]

发送邮件

除了导入,Wolfram 语言还可以将内容发送出去。

例如,SendMail 可以从 Wolfram 语言发送电子邮件。

发送一封邮件:

wl 复制代码
In[]:=SendMail["Hello from the Wolfram Language!"]

向测试账户发送主题为 "Wolf" 并附带一张狼的图片的邮件:

发送邮件需要在偏好设置 > Internet & Mail > Mail Settings 进行设置,配置本地 SMTP 服务器。

导出

导出云对象

如果你想与外部程序和服务交互,经常需要从 Wolfram 语言导出数据。

将一个圆的图形以 PDF 格式导出到云端:

wl 复制代码
In[]:=CloudExport[Graphics[Circle[]], "PDF"]
Out[]=CloudObject["https://www.wolframcloud.com/obj/bf984580-7678-4f6e-9372-f393bce41a37"]

导出本地对象

可以使用 Export 导出到本地文件。

将质数及其幂的表导出到本地电子表格文件:

wl 复制代码
In[]:=Export["primepowers.xls", Table[Prime[m]^n, {m, 10}, {n, 4}]]
Out[]="primepowers.xls"

桌面版可以在输出结果下方找到打开文件目录找到文件所在路径。

下面是生成文件的一部分内容:

将文件内容导回 Wolfram 语言

wl 复制代码
In[]:=Import["primepowers.xls"]
Out[18]=["Graphics3D"]]
Out[]={{{2., 4., 8., 16.}, {3., 9., 27., 81.}, {5., 25., 125., 625.}, {7., 
   49., 343., 2401.}, {11., 121., 1331., 14641.}, {13., 169., 2197., 
   28561.}, {17., 289., 4913., 83521.}, {19., 361., 6859., 
   130321.}, {23., 529., 12167., 279841.}, {29., 841., 24389., 
   707281.}}}

导出格式

Wolfram 语言可以导入和导出许多不同类型的格式。

导出3D打印

以适合 3D 打印的格式导出 3D 几何体:

wl 复制代码
In[19]:=Export["spikey.stl", 
 Entity["Polyhedron", "RhombicHexecontahedron"]

下面是从 spikey.stl 文件进行 3D 打印的结果:

3D 打印创建适当的几何形状可能相当复杂。

函数 Printout3D 可以自动完成所有步骤

------它也可以将最终几何发送到 3D 打印服务

(或者如果你有的话,发送到你自己的 3D 打印机)。

生成一堆随机的小球:

wl 复制代码
In[]:=Graphics3D[Sphere[RandomReal[5, {30, 3}]]]

将其发送到 Sculpteo 服务进行 3D 打印:

wl 复制代码
In[]:=Printout3D[%, "Sculpteo"]


下一节

数据集

相关推荐
豆沙沙包?9 小时前
2026年--Lc336-1448. 统计二叉树中好节点的数目(树)--java版
java·开发语言·深度优先
青小莫9 小时前
C++之类和对象(下)
java·开发语言·c++
superman超哥9 小时前
惰性求值(Lazy Evaluation)机制:Rust 中的优雅与高效
开发语言·后端·rust·编程语言·lazy evaluation·rust惰性求值
Wiktok9 小时前
关于Python继承和super()函数的问题
java·开发语言
古城小栈9 小时前
Rust IO 操作 一文全解析
开发语言·rust
李日灐9 小时前
C++STL:stack,queue,详解!!:OJ题练手使用和手撕底层代码
开发语言·c++
全栈小59 小时前
【前端】在JavaScript中,=、==和===是三种不同的操作符,用途和含义完全不同,一起瞧瞧
开发语言·前端·javascript
这里是彪彪10 小时前
Java中的volatile关键字的作用
java·开发语言
Dxy123931021610 小时前
Python的zip用法详解
开发语言·python