String 在mathematica中导入和操作.txt
我有一个巨大的文本文件,我导入mathematica。它看起来像这样:String 在mathematica中导入和操作.txt,string,list,import,wolfram-mathematica,String,List,Import,Wolfram Mathematica,我有一个巨大的文本文件,我导入mathematica。它看起来像这样: In[9]:=import=SplitBy[Import["textfile.txt","List"],"\\t"]; Out[9]:={{ A 021 2.3 A 002 2.6},{ A 012 2.3 A 001 2.6},{ A 120 2.6 A 111 2.9},{ A 122 2.8 A 121 2.8},{ A 000 1.3 A 121 2
In[9]:=import=SplitBy[Import["textfile.txt","List"],"\\t"];
Out[9]:={{ A 021 2.3 A 002 2.6},{ A 012 2.3 A 001 2.6},{ A 120 2.6 A 111 2.9},{ A 122 2.8 A 121 2.8},{ A 000 1.3 A 121 2.9},{ A 110 2.4 A 111 2.9},{ G 010 2.3 G 001 2.6},{ G 000 2.2 G 001 2.3 G 010 2.4},{ G 010 2.3 G 001 2.6},{ G 110 2.3 G 101 2.6}}
编辑:请注意,所有元素都由\\t
字符分隔
这是一个字符串列表
In[12]:= Head@import
Head@import[[1]]
Head@import[[All, 1]]
Head@import[[1, 1]]
Out[12]= List
Out[13]= List
Out[14]= List
Out[15]= String
我最大的问题是将这个列表转换成一个可管理的元素列表,这样我就可以搜索那些存在G的元素,而不是存在a的元素。我试着用一根绳子替换绳子上的部分。但是我仍然不能像我想要的那样处理数据,因为我不允许搜索单个的G元素。理想情况下,我最终想要得到的是
{{G,010,2.3},{G,001,2.6},{G,000,2.2},{G,001,2.3},{G,010,2.4},{G,010,2.3},{G,001,2.6},{G,110,2.3},{G,101,2.6}}
我已经知道我必须使用Take
命令,使用Partition
命令将子列表拆分为3个元素的子列表,以此类推。但是,因为我甚至无法从列表中获取数据,我无法做到这一点
此外,在导入时,我必须选择“List”
类型。如果我作为“Table”
导入,则所有操作都已完成一半,但元素“001”将变为“1”
你们能帮帮我吗?感谢您的帮助!
谢谢,这台机器上没有Mathematica,所以我的语法可能有点错误 没有
niceList = Partition[Flatten[import],3]
生成列表列表,其中内部级别的每个列表包含3个字符串?然后,像
Select[niceList,#[[1]]=="G"&]
应选择具有“G”
作为第一个元素的子列表
编辑
如果我现在理解您的意思,您的意思是在变量import
中有一个列表列表,每个较低级别的列表,例如
{ A 021 2.3 A 002 2.6}
是否包含单个字符串?换句话说
FullForm[ A 021 2.3 A 002 2.6]
返回
" A 021 2.3 A 002 2.6"
我将导入数据,用空格替换所有制表符,然后使用
StringSplit[]
(在正确的级别)将每个字符串转换为字符串列表。然后将展平
,分区
,等等。您可能会发现最简单的方法是首先将文件的全部内容导入到单个字符串中我在这台机器上没有Mathematica,因此我的语法可能有点错误
没有
niceList = Partition[Flatten[import],3]
生成列表列表,其中内部级别的每个列表包含3个字符串?然后,像
Select[niceList,#[[1]]=="G"&]
应选择具有“G”
作为第一个元素的子列表
编辑
如果我现在理解您的意思,您的意思是在变量import
中有一个列表列表,每个较低级别的列表,例如
{ A 021 2.3 A 002 2.6}
是否包含单个字符串?换句话说
FullForm[ A 021 2.3 A 002 2.6]
返回
" A 021 2.3 A 002 2.6"
我将导入数据,用空格替换所有制表符,然后使用
StringSplit[]
(在正确的级别)将每个字符串转换为字符串列表。然后将展平
,分区
,等等。您可能会发现最简单的方法是首先将文件的全部内容导入到单个字符串中在将来,如果您可以包含正在导入的实际文件的示例,这将非常有用。尽管如此,我相信我能够以足够的准确度猜测文件的格式,从而推荐以下内容:
data = ReadList["textfile.txt", {Word, Number, Number}]
如果文件的格式是我希望它返回的格式:
{{"A", 21, 2.3}, {"A", 2, 2.6}, {"A", 12, 2.3}, {"A", 1, 2.6}, {"A",
120, 2.6}, {"A", 111, 2.9}, {"A", 122, 2.8}, {"A", 121, 2.8}, {"A",
0, 1.3}, {"A", 121, 2.9}, {"A", 110, 2.4}, {"A", 111, 2.9}, {"G",
10, 2.3}, {"G", 1, 2.6}, {"G", 0, 2.2}, {"G", 1, 2.3}, {"G", 10,
2.4}, {"G", 10, 2.3}, {"G", 1, 2.6}, {"G", 110, 2.3}, {"G", 101,
2.6}}
从那里,您可以根据自己的喜好使用以下任何一种方法获取以“G”开头的记录:
Cases[data, {"G", ___}]
Select[data, "G" === #[[1]] &]
Pick[data, First /@ data, "G"]
在将来,如果您可以包含您正在导入的实际文件的示例,这将非常有帮助。尽管如此,我相信我能够以足够的准确度猜测文件的格式,从而推荐以下内容:
data = ReadList["textfile.txt", {Word, Number, Number}]
如果文件的格式是我希望它返回的格式:
{{"A", 21, 2.3}, {"A", 2, 2.6}, {"A", 12, 2.3}, {"A", 1, 2.6}, {"A",
120, 2.6}, {"A", 111, 2.9}, {"A", 122, 2.8}, {"A", 121, 2.8}, {"A",
0, 1.3}, {"A", 121, 2.9}, {"A", 110, 2.4}, {"A", 111, 2.9}, {"G",
10, 2.3}, {"G", 1, 2.6}, {"G", 0, 2.2}, {"G", 1, 2.3}, {"G", 10,
2.4}, {"G", 10, 2.3}, {"G", 1, 2.6}, {"G", 110, 2.3}, {"G", 101,
2.6}}
从那里,您可以根据自己的喜好使用以下任何一种方法获取以“G”开头的记录:
Cases[data, {"G", ___}]
Select[data, "G" === #[[1]] &]
Pick[data, First /@ data, "G"]
实际上,
niceList
就是这样工作的。但主要问题是,我仍然在字符串中获取\\t
字符。在niceList
中选择一个元素会给出{G2013.2G0093.2}…
我知道我可以用,
替换字符串中的每个\\t
,但这仍然不能给我一个可处理的元素列表,我可以使用选择或获取是的,我做到了!现在我得到了一份完全符合我要求的清单!谢谢你的建议是先把每件事都当作一根弦来对待,这很重要!实际上,niceList
就是这样工作的。但主要问题是,我仍然在字符串中获取\\t
字符。在niceList
中选择一个元素会给出{G2013.2G0093.2}…
我知道我可以用,
替换字符串中的每个\\t
,但这仍然不能给我一个可处理的元素列表,我可以使用选择或获取是的,我做到了!现在我得到了一份完全符合我要求的清单!谢谢你的建议是先把每件事都当作一根弦来对待,这很重要!谢谢你,巫师先生。下次我会这么做的——我现在没有带文件。如果我想忽略“G”等开头之前的几行呢?就像在中一样,我有几行随机的句子写在我感兴趣的列表开始之前。@SosiKun在这种情况下,你可以使用stream=OpenRead[“file.txt”]
然后Skip[stream,…]
(阅读Skip
的文档),最后ReadList[stream,{Word,Number,Number}]
。(完成后应关闭流:关闭[stream]
)谢谢Wizard先生。下次我会这么做的——我现在没有带文件。如果我想忽略“G”等开头之前的几行呢?就像在中一样,我有几行随机的句子写在我感兴趣的列表开始之前。@SosiKun在这种情况下,你可以使用stream=OpenRead[“file.txt”]
然后Skip[stream,…]
(阅读Skip
的文档),最后ReadList[stream,{Word,Number,Number}]
。(