找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2519|回复: 5

[求助] 新手求问一个格式转换程序的问题

1

主题

4

帖子

4

积分

贫民

积分
4
gswane 发表于 2017-10-30 02:18:13 | 显示全部楼层 |阅读模式
本人对于编程不是很懂,因为实验室的原因要跑一个把.rec文件转换到.csv的程序。
版本是Python2.7  根据提示把input_file改成自己文件的名字也不行,只能输出help的部分。
是要把完整的路径添加上去吗?还是其他问题?望各位帮助
  1. from os import stat
  2. from sys import argv
  3. from struct import unpack

  4. def print_help():
  5.     print """rec2csv input_file

  6.     Convert a navtive Avatar EEG binary data file to csv file format.
  7.     Output filename will be the same except with the .rec extension
  8.     replaced by .csv.

  9.     input_file
  10.           Name of the file to convert. Must have a .rec extension1.
  11.     """

  12. def main(input_filename):
  13.     print "Input File: %s" % input_filename
  14.     output_filename = input_filename.replace('.rec', '.csv')
  15.     file_stat = stat(input_filename)
  16.     file_size = file_stat.st_size
  17.     if ((file_size % 3072) != 0):
  18.         print 'Warning: input file_size %d data not contain an even number of records' % file_size
  19.     format_string = '%d, ' * (3 + 8 - 1);
  20.     format_string += '%d\n'
  21.     output_file = open(output_filename, 'wb')
  22.     input_file = open(input_filename, 'rb')
  23.     record_index = 0
  24.     while 1:
  25.         data = input_file.read(3072)
  26.         if len(data) != 3072:
  27.             break
  28.         if (record_index%4) == 0:
  29.             time_soc, time_frac_sec, frame_count = unpack('!IIH', data[0:10])
  30.             data = data[24:];
  31.         for i in range(0, len(data), 24):
  32.             data_tuple = (time_soc, time_frac_sec, frame_count)
  33.             for j in range(8):
  34.                 # convert 24 bit int to 32 bit int
  35.                 value = unpack('!i',data[i+j*3:i+j*3+3]+'\0')[0] >> 8
  36.                 data_tuple += (value,)
  37.             output_file.write(format_string % data_tuple)
  38.         record_index += 1

  39.     print '%d seconds worth of data' % (file_size / 3072)
  40.     print "Output file: %s" % output_filename

  41. if __name__ == '__main__':
  42.     keep_terminal_open = 0
  43.     try:
  44.         if len(argv) != 2 or argv[1][-4:] != '.rec':
  45.             print_help()
  46.         else:
  47.             main(argv[1])
  48.     finally:
  49.         if keep_terminal_open:
  50.             # keep the terminal open in windows so that a user can see the results
  51.             raw_input("\nPress enter to close this window...")


复制代码


回复

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-10-30 10:01:23 | 显示全部楼层
本帖最后由 uitb 于 2017-10-30 10:07 编辑

在终端或者cmd命令端,在这个脚本的同一目录输入脚本名称,或者任意位置打开终端输入脚本的完整路径,空格,加上你要转换的.rec文件完整路径,回车
当然,你如果不想输完整路径这么麻烦,可以吧脚本,.rec文件放在同一文件夹,并且在该文件夹下打开终端,依次输入脚本名,空格 文件名 回车,应该就OK了
注意:文件名跟脚本名定要是全名(带上扩展名的)
我去,半夜两点多还在忙工作,那个实验室这么刻苦啊,你们是啥专业哦
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
gswane  楼主| 发表于 2017-10-30 13:09:06 | 显示全部楼层
uitb 发表于 2017-10-30 10:01
在终端或者cmd命令端,在这个脚本的同一目录输入脚本名称,或者任意位置打开终端输入脚本的完整路径,空格 ...

哈哈谢谢夸奖,我们是研究脑端接口的。根据你的第二个方法跑了以后出现了这个错误。
想查也不知道这是什么错误,脚本和文件的路径是一致的。
  1. C:\Users\cross\AppData\Local\Programs\Python\python27\attention-control-master>rec2csv.py eeg.rec
  2.   File "C:\Users\cross\AppData\Local\Programs\Python\python27\attention-control-master\rec2csv.py", line 36
  3.     data = C:\Users\cross\AppData\Local\Programs\Python\python27\attention-control-master\eeg.read(3072)
  4.                  ^
  5. SyntaxError: invalid syntax
复制代码
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
gswane  楼主| 发表于 2017-10-30 13:10:55 | 显示全部楼层
代码显示出来有点错误了,那个  ^  是在C后面的  :  下面的
回复 支持 反对

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-10-30 16:32:06 | 显示全部楼层
gswane 发表于 2017-10-30 13:10
代码显示出来有点错误了,那个  ^  是在C后面的  :  下面的

这个错误有点点奇怪哈,代码看上去似乎并没有什么明显的问题,你代码是找人帮忙写的?如果找人帮你写的你可以问问他呗,或者你不介意的话,可以上传个没用的rec文件,我试试。。。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
gswane  楼主| 发表于 2017-10-30 20:35:29 | 显示全部楼层
uitb 发表于 2017-10-30 16:32
这个错误有点点奇怪哈,代码看上去似乎并没有什么明显的问题,你代码是找人帮忙写的?如果找人帮你写的你 ...

吃了个饭回来重启下又行了。谢谢了
  1. C:\Users\cross\AppData\Local\Programs\Python\python27\attention-control-master>rec2csv.py
  2. rec2csv input_file

  3.     Convert a navtive Avatar EEG binary data file to csv file format.
  4.     Output filename will be the same except with the .rec extension
  5.     replaced by .csv.

  6.     input_file
  7.           Name of the file to convert. Must have a .rec extension1.


  8. C:\Users\cross\AppData\Local\Programs\Python\python27\attention-control-master>rec2csv.py House.rec
  9. Input File: House.rec
  10. Warning: input file_size 1107 data not contain an even number of records
  11. 0 seconds worth of data
  12. Output file: House.csv
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表