fscanf在ctype python调用中不起作用

时间:2014-12-04 04:00:20

标签: python c ctypes scanf

我正在尝试使用ctypes将google的word2vec用于python中的新闻组预训练向量。

我这里有一大堆代码:

void initialize(){
  ...
  long long words, size;
  char *fname = "GoogleNews-vectors-negative300.bin.gz";
  strcpy(file_name, fname);
  printf("%s\n", file_name);
  f = fopen(file_name, "rb");
  if (f == NULL) {
      printf("Input file not found\n");
      return -1;
  }

  fscanf(f, "%lld ", &words);
  fscanf(f, "%lld", &size);
  printf("size of words is %d\n", words);
  ...
}

当我从主函数调用它时,此代码运行正常。但是,当我将它编译为.so文件并从ctypes调用它时,单词总是为零。用ftell检查,我注意到fscanf没有向前移动文件指针,fscanf总是返回0.它是一个二进制文件,所以我不知道fscanf在这里工作的区别是将这个3 GB二进制文件转换为更多大规模的.csv并从那里读取它。

如何解决这个问题?在这种情况下,避免使用fscanf的备用路由也可以。

1 个答案:

答案 0 :(得分:1)

OP的文件是压缩文件" GoogleNews-vectors-negative300.bin.gz"和代码旨在读取未压缩的版本。

重试未压缩版本。