将记录数组拆分为子数组,对它们进行混洗,然后将它们重新组合成CSV文件

时间:2014-02-17 16:47:17

标签: python arrays csv recarray

如果问题写得不好,请提前道歉。这是我在网站上的第二篇文章,我是一名新手程序员。首先,这就是我的目标:

  

步骤0:将CSV文件转换为记录数组

     

步骤1:将记录数组拆分为两个子数组

     

第2步:随机播放子阵列

     

步骤3:将两个子阵列分成四个较小的子阵列

     

步骤4:随机播放每个子阵列

     

步骤5:在子阵列之间混合和匹配值

     

步骤6:将子数组附加到两个记录数组之一,然后将记录数组合并到单个CSV文件中

前几步非常简单。

第0步:

import numpy as np
import random
from matplotlib.mlab import csv2rec
from matplotlib.mlab import rec2csv

# Get recarray from CSV file
ev = csv2rec('stimuli_1.csv',delimiter = ';')
ev.resize(60) #for even splits

# Create lists to append data to
audio_files = np.recarray([],dtype = ev.dtype)
audio_files_1 = np.recarray([],dtype = ev.dtype)
audio_files_2 = np.recarray([],dtype = ev.dtype)

第1步:

# Split recarray into two sub-arrays
split_1 = np.split(ev,2)

步骤2,3,4和& 5:

# Shuffle sub-arrays, split again, and then shuffle again
for a in split_1:
    #Set count for mix-and-matching
    count = 0

    #Shuffle
    np.random.shuffle(a)

    #Split
    split_2 = np.split(a,2)

    for b in split_2:
        count = count+1

        #Shuffle
        np.random.shuffle(b)

        if count == 1:
            audio_files_1 = np.append(audio_files_1,b)
        elif count == 2:
            audio_files_2 = np.append(audio_files_2,b)

第6步:

audio_files = np.append(audio_files,audio_files_1)
audio_files = np.append(audio_files,audio_files_2)

rec2csv(audio_files,'audio_files.csv')

我的问题出在这里。生成的CSV文件很好,除了它们有一些非常奇怪的值。例如,'audio'字段中的第一个值如下所示:

  

\ XB8 \ XCE \ xe1H \ XEB \ 0x7F部分\ X00 \ X00 \ XD0 \ X12 \ X81

是什么原因引起的?这与我如何将数组相互附加有关吗?

2 个答案:

答案 0 :(得分:0)

您的源文件是否包含Unicode字符?遗憾的是,标准库中的本机CSV模块仅处理ASCII字符。当某些内容被编码为扩展字符集到较低字符集时,您将获得这些字符。有一些“unicodecsv”软件包可能会对你的代码有所帮助或修改它们(它取决于你需要处理的Unicode字符)。

作为参考,Joel Sposky有this classic article

答案 1 :(得分:0)

这些是unicode字符。或者至少,他们看起来像unicode

处将它们转换为ASCII的一些好建议

我玩了

some_string = "\xb8\xce\xe1H\xeb\x7f\x00\x00\xd0\x12\x81"

for i in some_string:
    try:
        print i.decode("windows-1252")
    except:
        print i

并获得了一些可识别的角色。