c函数文件读写-阿里云开发者社区

开发者社区> 范大脚脚> 正文

c函数文件读写

简介:
+关注继续查看

typedef struct tagMessageStatus
{
 UIFormID FormID;
 ulong  ulLayerID;
 UIStringID enMessageID;
} MessageStatus;

static MessageStatus astMessageStatus [] = 
{
 {ID_Form_MSG_Normal_1,   UI_LAYER_MSG_NORMAL,  STRING_ID_Invalid},   //MSG_NORMAL_1
 {ID_Form_MSG_Normal1_UnTouch, UI_LAYER_MSG_NORMAL,  STRING_ID_Invalid},   //MSG_NORMAL_1_UNTOUCH
 {ID_Form_MSG_Normal_2,   UI_LAYER_MSG_NORMAL,  STRING_ID_Invalid},   //MSG_NORMAL_2
 {ID_Form_MSG_Normal_Multi,  UI_LAYER_MSG_NORMAL,  STRING_ID_Invalid},   //MSG_NORMAL_MULTI
 {ID_Form_MSG_Fontcode_1,  UI_LAYER_MSG_NORMAL,  STRING_ID_Invalid},   //MSG_FONTCODE_1
 {ID_Form_MSG_Fontcode_2,  UI_LAYER_MSG_NORMAL,  STRING_ID_Invalid},   //MSG_FONTCODE_2
 {ID_Form_MSG_Endless_1,   UI_LAYER_MSG_ENDLESS,  STRING_ID_Invalid},   //MSG_ENDLESS_1
 {ID_Form_MSG_Endless_2,   UI_LAYER_MSG_ENDLESS,  STRING_ID_Invalid},   //MSG_ENDLESS_2
 {ID_Form_MSG_Endless_Multi,  UI_LAYER_MSG_ENDLESS,  STRING_ID_Invalid},   //MSG_ENDLESS_MULTI
 {ID_Form_MSG_Modal,    UI_LAYER_MSG_MODAL,   STRING_ID_Invalid},   //MSG_MODAL
 {ID_Form_MSG_Dialog,   UI_LAYER_MSG_DIALOG,  STRING_ID_Invalid},   //MSG_DIALOG
 {ID_Form_MSG_Dialog_1,   UI_LAYER_MSG_DIALOG,  STRING_ID_Invalid},   //MSG_DIALOG
 {ID_Form_FU_Other,    UI_LAYER_MSG_DIALOG,  STRING_ID_Invalid},   //MSG_FU_OTHER
 {ID_Form_Write_Fashion,   UI_LAYER_MSG_DIALOG,  STRING_ID_Invalid},   //MSG_WRITTE_FASHION
 {ID_Form_Message_Route,   UI_LAYER_MSG_DIALOG,  STRING_ID_Invalid},   //MSG_ROUTE
 {ID_Form_Message_DestEdit,  UI_LAYER_MSG_DIALOG,  STRING_ID_Invalid},   //MSG_DEST_EDIT
 {ID_Form_MSG_Search_1,   UI_LAYER_MSG_DIALOG,  STRING_ID_Invalid},   //MSG_SEARCH_MASSAGE
};

 ===================================================================================

///////////////////////////////////////////////////////////////////////////////
// You can read,modify,delete or reuse this code in any where you liked to.
// But tou SHOULD NEVER DELETE the following copyright infomation.
// Copyright(C) 2005-2006 cokkiy.org cokkiy@gmail.com
////////////////////////////////////////////////////////////////////////////////

#include "TextFileIO.h"
#include "TextFileIO.h"
#include "stdafx.h"
#include "io.h"
#include "TextFileIO.h"

 

CTextFileIO::CTextFileIO(void)
:encodingType(ANSI)
, _IsValidate(false)
{
}

CTextFileIO::~CTextFileIO(void)
{
 if(_file)
  fclose(_file);
}

CTextFileIO::CTextFileIO(const WCHAR* filename,  WCHAR *mode)
{
 // Testing for file type
 encodingType=CTextFileIO::CheckFileEncodingTypeW(filename);

 _IsValidate=OpenW(filename,mode); 
}

CTextFileIO::CTextFileIO(const char* filename,  char *mode)
{
 // Testing for file type
 encodingType=CTextFileIO::CheckFileEncodingTypeA(filename);

 _IsValidate=OpenA(filename,mode); 
}

// Open file,UNICODE version
BOOL CTextFileIO::OpenW(const WCHAR* const filename, WCHAR *mode)
{
 _file=_wfopen(filename,mode);
 if(_file==NULL)
  return FALSE;
 // Write Encoding tag
 if(wcschr(mode,L'w')!=NULL)
  WriteEncodingTag(encodingType);
 // Seek  file pos
 if(wcschr(mode,L'r')!=NULL)
  OmitEncodingTag(encodingType);
 
 return TRUE;
}

// Open file,ANSI Version
BOOL CTextFileIO::OpenA(const char* const filename, char *mode)
{
 _file=fopen(filename,mode);
 if(_file==NULL)
  return FALSE;
 // Write Encoding tag
 if(strchr(mode,'w')!=NULL)
  WriteEncodingTag(encodingType);
 // Seek  file pos
 if(strchr(mode,'r')!=NULL)
  OmitEncodingTag(encodingType);
 
 return TRUE;
}

bool CTextFileIO::_ReadLine(string& s, int eol, int eof)
{

    // reset string
    s.clear();
    
    // read one char at a time
    while (true)
    {
        // read char
        int c = fgetc(_file);        
        
        // check for EOF
        if (c == eof || c == EOF) return false;

        // check for EOL
        if (c == eol) return true;

        // append this character to the string
        s += c;
    };
}

// Read a line from file,return value is UNICODE string
bool CTextFileIO::_ReadLine(wstring& s, wint_t eol, wint_t eof)
{
    // reset string
    s.clear();

    
    // read one wide char at a time
    while (true)
    {
        // read wide char
        wint_t c = fgetwc(_file);
        
        // check for EOF
        if (c == eof || c == WEOF) return false;

        // check for EOL
        if (c == eol) return true;

        // append the wide character to the string        
        s += c;
    };
 return 0;
}

bool CTextFileIO::_WriteLine(const char *const s, int ret,int newline, size_t length)
{
 // check if the pointer is valid
    if (!s)
    {
        return false;
    };
    
    // calculate the string's length
    if (length==-1)
    {
        length = strlen(s);
    };
    
    // write the string to the file
    size_t n = fwrite(s, sizeof(char), length, _file);
            
    // write line break to the file
 fputc(ret, _file);
 fputc(newline, _file);
            
    // return whether the write operation was successful
    return (n == length);
}

bool CTextFileIO::_WriteLine(const wchar_t *const s, wint_t ret,wint_t newline, size_t length)
{
     // check if the pointer is valid
    if (!s)
    {
        return false;
    };
        
    // calculate the string's length
    if (length==-1)
    {
        length = wcslen(s);
    };    
    
    // write the string to the file
    size_t n = fwrite(s, sizeof(wchar_t), length, _file);
            
    // write line break to the file
 fputwc(ret, _file);
 fputwc(newline,_file);
            
    // return whether the write operation was successful
    return (n == length);
}

// Unicode version of read line
bool CTextFileIO::ReadLineW(std::wstring &ws)
{
 bool bResult=false;
 switch(encodingType)
 {
 case ANSI:
  {
   std::string s;
   bResult=_ReadLine(s);
   s+='\0';
   int nLength=MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,s.c_str(),-1,NULL,0);
   LPWSTR lpwStr=new WCHAR[nLength];
   MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,s.c_str(),s.length(),lpwStr,nLength);
   ws=lpwStr;
  }
  break;
 case UTF_8:
  {
   std::string s;
   bResult=_ReadLine(s);
   s+='\0';
   int nLength=MultiByteToWideChar(CP_UTF8,0,s.c_str(),-1,NULL,0);
   LPWSTR lpwStr=new WCHAR[nLength];
   MultiByteToWideChar(CP_UTF8,0,s.c_str(),-1,lpwStr,nLength);
   ws=lpwStr;
  }
  break;
 case UTF16_BE:
  {
   std::wstring s;
   bResult=_ReadLine(s,0x0A00);
   // Convert UTF16 big endian to UTF little endian
   int nLength=s.length()*2-2;
   BYTE *src=(BYTE*)s.c_str();
   BYTE *dst=new BYTE[nLength+2];
   memset(dst,0,nLength+2);
   for(int i=0;i<nLength;)
   {
    dst[i]=src[i+1];
    dst[i+1]=src[i];
    i+=2;
   }
   ws=(WCHAR*)dst;
  }
  break;
 case UTF16_LE:
  {
   std::wstring s;
   bResult=_ReadLine(s);
   ws=s;
  }
  break;
 case UTF32_BE:
  {
   // TODO:will be implement later
  }
  break;
 case UTF32_LE:
  {
   // TODO:will be implement later
  }
  break;
 default:
  {
  }
 }
 return bResult;
}

bool CTextFileIO::ReadLineW(LPCWSTR ws)
{
 std::wstring s;
 bool bResult=ReadLineW(s);
 ws=s.c_str(); 
 return bResult;
}
// ANSI version of read line
bool CTextFileIO::ReadLineA(std::string &s)
{
 bool bResult=false;
 switch(encodingType)
 {
 case ANSI:
  {
   bResult=_ReadLine(s);
  }
  break;
 case UTF_8:
  {
   std::string s;
   bResult=_ReadLine(s);
   s+='\0';
   // Convert utf-8 to ANSI,must first convert to UTF16-LE,then to ANSI
   int nLength=MultiByteToWideChar(CP_UTF8,0,s.c_str(),-1,NULL,0);
   LPWSTR lpwStr=new WCHAR[nLength];
   MultiByteToWideChar(CP_UTF8,0,s.c_str(),-1,lpwStr,nLength);
   nLength=WideCharToMultiByte(CP_ACP,0,lpwStr,nLength,NULL,0,NULL,NULL);
   LPSTR lpStr=new CHAR[nLength];
   WideCharToMultiByte(CP_UTF8,0,lpwStr,nLength,lpStr,nLength,NULL,NULL);
   s=lpStr;
  }
  break;
 case UTF16_BE:
  {
   // Convert UTF16 big endian to UTF little endian
   std::wstring ws;
   bResult=_ReadLine(ws,0x0A00);
   int nLength=ws.length()*2-2;
   BYTE *src=(BYTE*)ws.c_str();
   BYTE *dst=new BYTE[nLength+2];
   memset(dst,0,nLength+2);
   for(int i=0;i<nLength;)
   {
    dst[i]=src[i+1];
    dst[i+1]=src[i];
    i+=2;
   }
   ws.clear();
   ws=(WCHAR*)dst;
   // Convert UTF16 little endian to ANSI
   nLength=WideCharToMultiByte(CP_ACP,0,ws.c_str(),-1,NULL,0,NULL,NULL);
   LPSTR lpStr=new CHAR[nLength];
   WideCharToMultiByte(CP_ACP,0,ws.c_str(),-1,lpStr,nLength,NULL,NULL);
   s=lpStr;
  }
  break;
 case UTF16_LE:
  {
   std::wstring ws;
   bResult=_ReadLine(ws);
   int nLength=WideCharToMultiByte(CP_ACP,0,ws.c_str(),-1,NULL,0,NULL,NULL);
   LPSTR lpStr=new CHAR[nLength];
   WideCharToMultiByte(CP_ACP,0,ws.c_str(),-1,lpStr,nLength,NULL,NULL);
   s=lpStr;
  }
  break;
 case UTF32_BE:
  {
   // TODO:will be implement later   
  }
  break;
 case UTF32_LE:
  {
   // TODO:will be implement later
  }
  break;
 default:
  {
  }
 }
 return bResult;
}

bool CTextFileIO::ReadLineA(LPCSTR s)
{
 std::string s_s;
 bool bResult=ReadLineA(s_s);
 s=s_s.c_str(); 
 return bResult;
}

// UNICODE version of write line
bool CTextFileIO::WriteLineW(const wchar_t *const wc)
{
 bool bResult=false;
 switch(encodingType)
 {
 case ANSI:
  {
   int nLength=WideCharToMultiByte(CP_ACP,0,wc,-1,NULL,0,NULL,NULL);
   LPSTR lpStr=new char[nLength];
   WideCharToMultiByte(CP_ACP,0,wc,-1,lpStr,nLength,NULL,NULL);
   bResult=_WriteLine(lpStr);
  }
  break;
 case UTF_8:
  {
   // Convert utf-16 to UTF8
   int nLength=WideCharToMultiByte(CP_UTF8,0,wc,-1,NULL,0,NULL,NULL);
   LPSTR lpStr=new CHAR[nLength];
   WideCharToMultiByte(CP_UTF8,0,wc,-1,lpStr,nLength,NULL,NULL);
   // Write to file
   bResult=_WriteLine(lpStr);
  }
  break;
 case UTF16_BE:
  {
   BYTE *src=(BYTE*)wc;
   int nLength=wcslen(wc)*2;
   BYTE *dst=new BYTE[nLength]+2;
   memset(dst,0,nLength+2);
   for(int i=0;i<nLength;)
   {
    dst[i]=src[i+1];
    dst[i+1]=src[i];
    i+=2;
   }
   bResult=_WriteLine((wchar_t*)dst,0x0D00,0x0A00);
  }
  break;
 case UTF16_LE:
  {
   bResult=_WriteLine(wc);
  }
  break;
 case UTF32_BE:
  {
   // TODO:will be implement later
  }
  break;
 case UTF32_LE:
  {
   // TODO:will be implement later
  }
  break;
 default:
  {
  }
 }
 return bResult;
}

// ANSI Version of writeline
bool CTextFileIO::WriteLineA(const char *const c)
{
 bool bResult=false;
 switch(encodingType)
 {
 case ANSI:
  {
   bResult=_WriteLine(c);
  }
  break;
 case UTF_8:
  {
   // First convert to UTF16 litter endier
   int nLength=MultiByteToWideChar(CP_ACP,0,c,-1,NULL,0);
   LPWSTR lpWStr=new WCHAR[nLength];
   MultiByteToWideChar(CP_ACP,0,c,-1,lpWStr,nLength);
   // Convert utf-16 to UTF8
   int Length=WideCharToMultiByte(CP_UTF8,0,lpWStr,nLength,NULL,0,NULL,NULL);
   LPSTR lpStr=new CHAR[Length];
   WideCharToMultiByte(CP_UTF8,0,lpWStr,nLength,lpStr,Length,NULL,NULL);
   // Write to file
   bResult=_WriteLine(lpStr);
  }
  break;
 case UTF16_BE:
  {
   // First convert to UTF16 litter endian
   int nLength=MultiByteToWideChar(CP_ACP,0,c,-1,NULL,0);
   LPWSTR lpWStr=new WCHAR[nLength];
   MultiByteToWideChar(CP_ACP,0,c,-1,lpWStr,nLength);
   // Then convert to UTF16 big endian
   BYTE *src=(BYTE*)lpWStr;
   nLength=wcslen(lpWStr)*2;
   BYTE *dst=new BYTE[nLength+2];
   memset(dst,0,nLength+2);
   for(int i=0;i<nLength;)
   {
    dst[i]=src[i+1];
    dst[i+1]=src[i];
    i+=2;
   }
   // Write to file
   bResult=_WriteLine((wchar_t*)dst,0x0D00,0x0A00);
  }
  break;
 case UTF16_LE:
  {
   // First convert to UTF16 litter endian
   int nLength=MultiByteToWideChar(CP_ACP,0,c,-1,NULL,0);
   LPWSTR lpWStr=new WCHAR[nLength];
   MultiByteToWideChar(CP_ACP,0,c,-1,lpWStr,nLength);
   bResult=_WriteLine(lpWStr);
  }
  break;
 case UTF32_BE:
  {
   // TODO:will be implement later
  }
  break;
 case UTF32_LE:
  {
   // TODO:will be implement later
  }
  break;
 default:
  {
  }
 }
 return bResult;
}
// Check file encoding type
CTextFileIO::EncodingType CTextFileIO::CheckFileEncodingTypeW(const WCHAR* const filename)
{
 FILE* _file=_wfopen(filename,L"rb");
 // Read first 4 byte for testing
 BYTE* buf=new BYTE[4];
 size_t nRead=fread((void*)buf,sizeof(BYTE),4,_file);
 // Close file
 fclose(_file);

 // Testing
 if(nRead<2)
  return ANSI;
 // Testting tocken
 BYTE utf32_le[]={0xFF,0xFE,0x00,0x00};
 if(memcmp(buf,&utf32_le,4)==0)
  return UTF32_LE;

 BYTE utf32_be[]={0x00,0x00,0xFE,0xFF};
 if(memcmp(buf,&utf32_be,4)==0)
  return UTF32_BE;

 BYTE utf_8[]={0xEF,0xBB,0xBF};
 if(memcmp(buf,&utf_8,3)==0)
  return UTF_8;

 BYTE utf16_le[]={0xFF,0xFE};
 if(memcmp(buf,&utf16_le,2)==0)
  return UTF16_LE;

 BYTE utf16_be[]={0xFE,0xFF};
 if(memcmp(buf,&utf16_be,2)==0)
  return UTF16_BE;
 // Else
 return ANSI;
}

CTextFileIO::EncodingType CTextFileIO::CheckFileEncodingTypeA(const CHAR* const filename)
{
 FILE* _file=fopen(filename,"rb");
 // Read first 4 byte for testing
 BYTE* buf=new BYTE[4];
 size_t nRead=fread((void*)buf,sizeof(BYTE),4,_file);
 // Close file
 fclose(_file);

 // Testing
 if(nRead<2)
  return ANSI;
 // Testting tocken
 BYTE utf32_le[]={0xFF,0xFE,0x00,0x00};
 if(memcmp(buf,&utf32_le,4)==0)
  return UTF32_LE;

 BYTE utf32_be[]={0x00,0x00,0xFE,0xFF};
 if(memcmp(buf,&utf32_be,4)==0)
  return UTF32_BE;

 BYTE utf_8[]={0xEF,0xBB,0xBF};
 if(memcmp(buf,&utf_8,3)==0)
  return UTF_8;

 BYTE utf16_le[]={0xFF,0xFE};
 if(memcmp(buf,&utf16_le,2)==0)
  return UTF16_LE;

 BYTE utf16_be[]={0xFE,0xFF};
 if(memcmp(buf,&utf16_be,2)==0)
  return UTF16_BE;
 // Else
 return ANSI;
}
// Omit file encoding tag
int CTextFileIO::OmitEncodingTag(EncodingType type)
{
 int nResult=0;
 switch(encodingType)
 {
 case UTF_8:
   nResult=fseek(_file,3,SEEK_SET);
  break;
 case UTF16_BE:
 case UTF16_LE:
   nResult=fseek(_file,2,SEEK_SET);
  break;
 case UTF32_BE:
 case UTF32_LE:
  nResult=fseek(_file,4,SEEK_SET);
  break;
 }
 return nResult;
}

// Write the encoding type tag an beginner of file
void CTextFileIO::WriteEncodingTag(EncodingType type)
{
 switch(type)
 {
 case UTF_8:
  {
   BYTE utf_8[]={0xEF,0xBB,0xBF};
   fwrite(utf_8,sizeof(BYTE),3,_file);
  }   
  break;
 case UTF16_BE:
  {
   BYTE utf16_be[]={0xFE,0xFF};
   fwrite(utf16_be,sizeof(BYTE),2,_file);
  }
  break;
 case UTF16_LE:
  {
   BYTE utf16_le[]={0xFF,0xFE};
   fwrite(utf16_le,sizeof(BYTE),2,_file);
  }   
  break;
 case UTF32_BE:
  {
   BYTE utf32_be[]={0x00,0x00,0xFE,0xFF};
   fwrite(utf32_be,sizeof(BYTE),4,_file);
  }
 case UTF32_LE:
  {
   BYTE utf32_le[]={0xFF,0xFE,0x00,0x00};
   fwrite(utf32_le,sizeof(BYTE),4,_file);
  }  
  break;
 default:; // ANSI, do nothing
 }

}

 

 

posted on 2012-04-01 17:11 莫水千流 阅读(331) 评论(1编辑 收藏

评论:
#1楼[楼主2016-04-11 10:05 | 莫水千流  
先总结一下网上找到的三种转换的方法:

方法一:使用函数setlocale

setlocale(LC_ALL,"chs");

需要包含头文件#include<locale.h>

此方法的思路是配置地域化信息。通常在需要输入输出中文的时候设置一下,就没问题了,setlocale详情点我

方法二:使用函数:T2A、W2A

CString str = _T("D://校内项目//QQ.bmp");

//声明标识符
USES_CONVERSION;

//调用函数,T2A和W2A均支持ATL和MFC中的字符转换
char* pFileName =T2A(str); 
//char * pFileName = W2A(str); //也可实现转换

注意:有时候可能还需要添加引用#include <afxpriv.h>

使用此方法要注意声明标识符,T2A、W2A详情 点我

方法三:使用API:WideCharToMultiByte进行转换

CString str = _T("D://校内项目//QQ.bmp");

//注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的
int n =str.GetLength(); // n = 14, len = 18

//获取宽字节字符的大小,大小是按字节计算的
intlen =WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);

//为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小
char * pFileName = newchar[len+1]; //以字节为单位

//宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),pFileName,len,NULL,NULL);

WideCharToMultiByte(CP_ACP,0,str,str.GetLength() + 1 ,pFileName,len+ 1 ,NULL,NULL);

pFileName[len+1]= '/0'; //多字节字符以'/0'结束

这三种方法都是感觉比较靠谱的,也有很多人验证了可以成功,但是在我用的时候很悲催,三种方法都不行,经过仔细的考虑,发现第三种方法应该是万无一失,最保险的方法啊,后来经过仔细查找,原来是参数出了问题,黄色被我划掉的是网上流传的比较广泛的方法,WideCharToMultiByte(CP_ACP,0,str,str.GetLength()+ 1 ,pFileName,len + 1,NULL,NULL);是我验证成功的写法,至于为什么是这样,留给大家自己思考。



本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/archive/2012/04/01/2320084.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10053 0
php移动文件的函数 move_uploaded_file()和copy
最近遇到的问题就是:用户提交一个图片,我这边给缩放成三种格式的大小,缩放的方法存在,所以我这边直接就调用三次,结果只有一张图片上传,采用循环调用的方法还是只有一个图片,后来发现 提交文件的时候有一个移动函数 move_uploaded_file(),这个函数虽然多次调用但是只能执行一次,原因就在于...
575 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10882 0
Qt-QML-关于两个平级的qml文件中的函数调用问题
Qt-QML-关于两个平级的qml文件中的函数调用问题
15 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13867 0
《利用Python进行数据分析·第2版》第3章 Python的数据结构、函数和文件
第1章 准备工作第2章 Python语法基础,IPython和Jupyter 第3章 Python的数据结构、函数和文件第4章 NumPy基础:数组和矢量计算第5章 pandas入门第6章 数据加载、存储与文件格式第7章 数据清洗和准备第8章 数据规整:聚合、合并和重塑第9章 绘图和可视化第10章 数据聚合与分组运算第11章 时间序列第12章 pandas高级应用第13章 Python建模库介绍第14章 数据分析案例附录A NumPy高级应用附录B 更多关于IPython的内容(完) 本章讨论Python的内置功能,这些功能本书会用到很多。
1114 0
+关注
3656
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载