【问题标题】:Write MATLAB string data to csv , and then call csv data from python as string将 MATLAB 字符串数据写入 csv ,然后从 python 调用 csv 数据作为字符串
【发布时间】:2018-11-30 16:38:44
【问题描述】:

要将 MATLAB 数据转换为 csv,我的代码是:

M={'It is raining since morning'}
csvwrite('data.csv',M)

将句子像单个字符一样保存在单个单元格中

| I | t | | i | s | | r | a | i | n | i | n | g |......

当我从 Python 调用它时,我的代码是:

import csv
with open('data.csv') as csvfile:
    readCSV = csv.reader(csvfile)
    for row in readCSV:
        a=(row)
        print(a)

给出结果:

['I', 't', ' ', 'i', 's', ' ', 'r', 'a', 'i', 'n', 'i', 'n', 'g', ' ', 's', 'i', 'n', 'c', 'e', ' ', 'm', 'o', 'r', 'n', 'i', 'n', 'g']

我只想把这句话保存为这样的字符串,"It is raining Since Morning"。

如果我要发送此数据进行转换,我还想将此文本转换为语音

>> ['I', 't', ' ', 'i', 's', ' ', 'r', 'a', 'i', 'n', 'i', 'n', 'g', ' ', 's', 'i', 'n', 'c', 'e', ' ', 'm', 'o', 'r', 'n', 'i', 'n', 'g']

它给出了错误:

AttributeError: 'list' 对象没有属性 'strip'

【问题讨论】:

  • print(''.join(a))
  • CSV 代表逗号分隔的 VALUE。你没有分离价值观。不要将圆钉塞入方孔中。只需使用fwrite() 写入任何支持字符串的格式(例如 txt、dat)
  • @Adriaan 我的 matlab 知识几乎已经生锈了,但是 python 方面的答案和我的评论正在修复一些你似乎可以在上游避免的东西。如果你发布一个答案来阻止它,我更愿意投票反对修复下游。

标签: python string matlab csv


【解决方案1】:

您正在尝试将字符串保存为支持数字的格式。不要把圆钉塞进方孔,而要弄一个圆孔,比如.txt:

M='It is raining since morning'; % Why a cell? Character arrays work better
FiD = fopen('data.txt','w+'); % Create and open file for writing
fprintf(FiD,M); % write data
fclose(FiD); % Close file

我不知道如何在 Python 中工作,但是将纯字符串解析成合适的格式应该不会太麻烦。

【讨论】:

  • 这里的文件是什么样的?只是普通的单行文本?知道的话可以给你对应的python端
  • @roganjosh 当前的单行文本。 OP可能需要额外的行或其他内容,然后需要在每个句子的末尾使用\n添加换行符,即fprintf(FiD,[M'\n']);
  • 好的,我会把代码放进去,但我在打电话,所以你可能需要修复格式
  • @roganjosh 因为我不会说任何 Python,所以我不能保证用它编写的任何代码的正确性。请务必编写您自己的单独答案。当然,如果你愿意,你可以链接到我的。
  • @roganjosh 是的,该文件是一个带有句子的简单文本文件,请告诉我字符串的 python 代码。
【解决方案2】:

不确定 MATLAB 方面,但由于字符串是可迭代的,它看起来像是将字符串解释为您要保存的字符列表,然后将这些逗号分隔,因此您的实际 CSV 文件可能看起来像这样在文本编辑器中打开它:

I,t, ,i,s, ,r,a,i,n,i,n,g, ,s,i,n,c,e, ,m,o,r,n,i,n,g 

要仅将单个字符串保存到 CSV,请尝试将其作为数组的单个元素以在 CSV 中获取以下文本

It is raining since morning  

也就是说,CSV 似乎并不适合您的用例。为什么不只是一个简单的 .txt 文件?

在 python 方面,如果您使用csv 加载上述内容,您将获得一个包含单个项目的列表:

print(a)

Out: ['It is raining since morning']

或者,您可以从字符列表中创建所需的字符串:

a = ''.join(a)

另外,附注:strip 不会对该字符串执行任何操作,因为没有前导或尾随空格。希望对您有所帮助。

【讨论】:

    【解决方案3】:

    根据Matlab's documentation for csvwrite,它只支持数字矩阵。你最好使用支持字符串的xlswrite。 Python 还具有读取 excel 文件的能力,因此从 csv 到 xls 的切换应该是微不足道的。

    【讨论】:

    • 写入 Excel 文件是 A) 矫枉过正,B) 在 Excel 中不使用时毫无意义。只需使用低级别的fwrite
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2023-03-12
    • 2012-02-27
    • 2011-08-08
    相关资源
    最近更新 更多