精华内容
下载资源
问答
  • 如果很多时候我们没有约定好文件格式,我们就难以读取文件内容,此时,我们就需要一个工具来探测所读文本的编码格式,此工具可以允许用户读取诸如utf-8,gbk,gb2312一类的文件格式。内置了一些常用的探测实现类,...
  • 经常用pandas读取csv格式文件,pandas默认使用utf-8编码格式,但有的文件并非这种编码,虽然可以通过记事本打开文件,然后另存为,通过保存格式为utf-8格式,但是这种方式实在是太麻烦太傻,如图1 手动查看编码格式...

    困扰

    经常用pandas读取csv格式文件,pandas默认使用utf-8编码格式,但有的文件并非这种编码,虽然可以通过记事本打开文件,然后另存为,通过保存格式为utf-8格式,但是这种方式实在是太麻烦太傻,如图1
    手动查看编码格式。
    图1
    另存为其它格式
    在这里插入图片描述

    自动判断类型

    通过代码自动判断类型,写一个get_encoding函数

    def get_encoding(file):
        with open(file,'rb') as f:
            tmp = chardet.detect(f.read())
            return tmp['encoding']
    

    正常运行需要导入chardet包

    import chardet
    

    代码中chardet.detect输入文件内容,返回要给字典,通过字典键‘encoding’获取编码值,如果文件很大,建议输入为f.read(2)就行,读入前5行内容作为输入即可

    效果

    if __name__ == '__main__':
        fpath = "D:\\异常检测\\nab\\realAWSCloudwatch\\realAWSCloudwatch"
        fname = "\\ec2_cpu_utilization_825cc2.csv"
        fullPath = fpath + fname
        encoding = get_encoding(fullPath)
        print(encoding)
        data = pd.read_csv(fullPath, encoding = encoding)
        print(data.head(2))
    

    结果
    在这里插入图片描述
    类型为ascii
    好处为每次读取文件时不用取一个一个查看文件编码格式了,自动获取编码格式并读取文件了。

     data = pd.read_csv(fullPath, encoding = encoding)
    

    完整demo

    def get_encoding(file):
        with open(file,'rb') as f:
            return chardet.detect(f.read(1))['encoding']
    
    if __name__ == '__main__':
        fpath = "D:\\异常检测\\nab\\realAWSCloudwatch\\realAWSCloudwatch"
        fname = "\\ec2_cpu_utilization_825cc2.csv"
        fullPath = fpath + fname
        encoding = get_encoding(fullPath)
        print(encoding)
        data = pd.read_csv(fullPath, encoding = encoding)
        print(data.head(2))
    
    展开全文
  • 通过读取CSV文件头,判断文件是是否属于CSV文件类型,一般而言仅仅只是通过文件后缀来判断该文件所属的类型,这样是合理的,只要更改一下文件后缀就无法识别这个文件到底是不是正确的文件格式,把可执行的文件后缀...

    通过读取文件头部判断是否为CSV格式文件

                通过读取CSV文件头,判断文件是是否属于CSV文件类型,一般而言仅仅只是通过文件后缀来判断该文件所属的类型,这样是不合理的,只要更改一下文件后缀就无法识别这个文件到底是不是正确的文件格式,把可执行的文件后缀改为.CSV如果是通过判断文件后缀来识别文件类型,这样肯定是行不通的,因为exe的文件格式肯定不是CSV的格式,如果提前判断出这个文件头的这样就能定位这个文件是不是我们所需要的文件类型,避免对错误的文件进行解析。同样也可以在某种程度上保护服务器的安全。

    /*
     * System Abbrev :
     * system Name  :
     * Component No  :
     * Component Name:
     * File name     :Util.java
     * Author        :Qiuzhenping
     * Date          :2014-11-30
     * Description   :  <description>
     */
    
    /* Updation record 1:
     * Updation date        :  2014-11-30
     * Updator          :  Qiuzhenping
     * Trace No:  <Trace No>
     * Updation No:  <Updation No>
     * Updation Content:  <List all contents of updation and all methods updated.>
     */
    package com.qiuzhping.util;
    
    import java.io.FileInputStream;
    
    /**
     * <Description functions in a word> 
     * 通过读取CSV文件头,判断文件是是否属于CSV文件类型,一般而言仅仅只是通过文件后缀来判断该文件所属的类型,
     * 这样是不合理的,只要更改一下文件后缀就无法识别这个文件到底是不是正确的文件格式,把可执行的文件后缀改为.CSV
     * 如果是通过判断文件后缀来识别文件类型,这样肯定是行不通的,因为exe的文件格式肯定不是CSV的格式,如果提前判断
     * 出这个文件头的这样就能定位这个文件是不是我们所需要的文件类型,避免对错误的文件进行解析。同样也可以在某种程度上
     * 保护服务器的安全。
     * <Detail description>
     * 
     * @author Qiuzhenping
     * @version [Version NO, 2014-11-30]
     * @see [Related classes/methods]
     * @since [product/module version]
     */
    public class Util {
    
    	/** <Description functions in a word>
    	 * Bytes to Hex String
    	 * 将字节数组转换成16进制字符串
    	 * <Detail description>
    	 * @author  Qiuzhenping
    	 * @param src
    	 * @return [Parameters description]
    	 * @return String [Return type description]
    	 * @exception throws [Exception] [Exception description]
    	 * @see [Related classes#Related methods#Related properties]
    	 */
    	public static String bytes2HexString(byte[] src) {
    		StringBuilder stringBuilder = new StringBuilder();
    		if (src == null || src.length <= 0) {
    			return null;
    		}
    		for (int i = 0; i < src.length; i++) {
    			int v = src[i] & 0xFF;
    			String hv = Integer.toHexString(v);
    			if (hv.length() < 2) {
    				stringBuilder.append(0);
    			}
    			stringBuilder.append(hv);
    		}
    		System.out.println(" bytes2HexString = "+stringBuilder.toString().toUpperCase());
    		return stringBuilder.toString().toUpperCase();
    	}
    
    	/** <Description functions in a word>
    	 * Judge this FileInputStream is csv file
    	 * 判断该文件流头部是否包含有指定的信息,从而确认该文件是不是正确的文件类型
    	 * <Detail description>
    	 * @author  Qiuzhenping
    	 * @param is
    	 * @return [Parameters description]
    	 * @return boolean [Return type description]
    	 * @exception throws [Exception] [Exception description]
    	 * @see [Related classes#Related methods#Related properties]
    	 */
    	public static boolean judgeIsCSV(FileInputStream is){
    		try {
    			byte[] b = new byte[4];
    			is.read(b, 0, b.length);
    			return bytes2HexString(b).contains("5B75726C");//CSV文件的头部的前4个字节
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return false;
    	}
    
    	public static void main(String[] args) throws Exception {
    		String src = "C:/dataTemp/Url使用.csv";
    		FileInputStream is = new FileInputStream(src);
    		System.out.println(judgeIsCSV(is));
    		src = "C:/dataTemp/Url使用.csv";
    		is = new FileInputStream(src);
    		System.out.println(judgeIsCSV(is));
    	}
    }
    
    转载请注明:http://blog.csdn.net/qiuzhping/article/details/41626295

    展开全文
  • 主要介绍了php通过文件头判断格式的方法,涉及php文件读取及字符串解析的相关技巧,需要的朋友可以参考下
  • EOF的值为-1,所以往往使用EOF也可以判断文件是否结束,一般用在非格式化文本文件读取中,如果在格式化文本读取时使用EOF来判断,在某些情况下是会出错的。 函数fgetc返回的值为一个字符,当文件结束时,返回EOF,...

    C语言文件读写-判断文件是否结束

    在读文件的时候,很重要的一个条件是:文件是否结束,因为文件已经结束了,就不用继续读文件了。

    判断文件结束,有许多方式,比如读取文本文件和二进制文件就可以使用不同的方式,下面分别进行详细介绍和举例。

    使用EOF判断文件是否结束

    EOF的值为-1,所以往往使用EOF也可以判断文件是否结束,一般用在非格式化文本文件读取中,如果在格式化文本读取时使用EOF来判断,在某些情况下是会出错的。

    函数fgetc返回的值为一个字符,当文件结束时,返回EOF,因为文本文件中可打印字符没有字符的值是-1,所以,可以用EOF来判断文件是否结束了。

    这也是唯一的一个可以使用EOF来判断文件是否结束,而且永远正确的函数,前提是必须是读文本文件(格式化或者非格式化都可以支持)。

    我们来看一下使用fgetc和EOF来检测文件是否结束的例子,代码如下:

    void EOF_test_getc(const char* file_name)
    {
    	int ch = 0;
    	int count = 0;
    	FILE *file = fopen(file_name,"r");
    	if(!file)
    		return;
    	while(1)
    	{
    		ch = fgetc(file);
    		if(ch == EOF)
    		{
    			printf("reach the end of file,the char number is %d\n",count);
    			break;
    		}
    		else
    		{
    			count++;
    			putchar(ch);
    		}
    	}
    	fclose
    展开全文
  • java判断文本文件编码格式

    万次阅读 2019-08-06 09:32:00
    上篇文章需要读取当前java或者配置文件的编码... * 判断文件的编码格式 * @param fileName :file * @return 文件编码格式 * @throws Exception */ public static String codeString(File fileName) thro...

    上篇文章需要读取当前java或者配置文件的编码格式,这里主要支持UTF-8、GBK、UTF-16、Unicode等

    /**
    	 * 判断文件的编码格式
    	 * @param fileName :file
    	 * @return 文件编码格式
    	 * @throws Exception
    	 */
    	public static String codeString(File fileName) throws Exception{
    		BufferedInputStream bin = new BufferedInputStream(
    		new FileInputStream(fileName));
    		int p = (bin.read() << 8) + bin.read();
    		String code = null;
    		
    		switch (p) {
    			case 0xefbb:
    				code = "UTF-8";
    				break;
    			case 0xfffe:
    				code = "Unicode";
    				break;
    			case 0xfeff:
    				code = "UTF-16BE";
    				break;
    			default:
    				code = "GBK";
    		}
    		IOUtils.closeQuietly(bin);
    		return code;
    	}
    

    上面这段代码只能判断带bom的文本,如果非bom文本,还有两种方式
    1、 轮询常用的编码,知道找到匹配的,如下面一段测试代码

      
    
    /*
     *  Copyright 2010 Georgios Migdos <cyberpython@gmail.com>.
     * 
     *  Licensed under the Apache License, Version 2.0 (the "License");
     *  you may not use this file except in compliance with the License.
     *  You may obtain a copy of the License at
     * 
     *       http://www.apache.org/licenses/LICENSE-2.0
     * 
     *  Unless required by applicable law or agreed to in writing, software
     *  distributed under the License is distributed on an "AS IS" BASIS,
     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *  See the License for the specific language governing permissions and
     *  limitations under the License.
     *  under the License.
     */
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.nio.ByteBuffer;
    import java.nio.charset.CharacterCodingException;
    import java.nio.charset.Charset;
    import java.nio.charset.CharsetDecoder;
    
    /**
     *
     * @author Georgios Migdos <cyberpython@gmail.com>
     */
    public class CharsetDetector {
    
        public Charset detectCharset(File f, String[] charsets) {
    
            Charset charset = null;
    
            for (String charsetName : charsets) {
                charset = detectCharset(f, Charset.forName(charsetName));
                if (charset != null) {
                    break;
                }
            }
    
            return charset;
        }
    
        private Charset detectCharset(File f, Charset charset) {
            try {
                BufferedInputStream input = new BufferedInputStream(new FileInputStream(f));
    
                CharsetDecoder decoder = charset.newDecoder();
                decoder.reset();
    
                byte[] buffer = new byte[512];
                boolean identified = false;
                while ((input.read(buffer) != -1) && (!identified)) {
                    identified = identify(buffer, decoder);
                }
    
                input.close();
    
                if (identified) {
                    return charset;
                } else {
                    return null;
                }
    
            } catch (Exception e) {
                return null;
            }
        }
    
        private boolean identify(byte[] bytes, CharsetDecoder decoder) {
            try {
                decoder.decode(ByteBuffer.wrap(bytes));
            } catch (CharacterCodingException e) {
                return false;
            }
            return true;
        }
    
        public static void main(String[] args) {
            File f = new File("example.txt");
    
            String[] charsetsToBeTested = {"UTF-8", "windows-1253", "ISO-8859-7"};
    
            CharsetDetector cd = new CharsetDetector();
            Charset charset = cd.detectCharset(f, charsetsToBeTested);
    
            if (charset != null) {
                try {
                    InputStreamReader reader = new InputStreamReader(new FileInputStream(f), charset);
                    int c = 0;
                    while ((c = reader.read()) != -1) {
                        System.out.print((char)c);
                    }
                    reader.close();
                } catch (FileNotFoundException fnfe) {
                    fnfe.printStackTrace();
                }catch(IOException ioe){
                    ioe.printStackTrace();
                }
    
            }else{
                System.out.println("Unrecognized charset.");
            }
        }
    }
        
    

    2、 使用谷歌依赖库来进行判断
    https://code.google.com/archive/p/juniversalchardet/

    展开全文
  • 判断文件是否为图片格式

    千次阅读 2019-03-07 19:09:10
    判断文件是否为图片格式 原理:1、使用JDK类库解析文件数据,如果能解析成功,获得图片长宽,即为正确的图片格式 2、解析文件头信息,判断图片类型 工具代码 /** * 判断文件后缀是否为图片文件格式,bmp|...
  • 解决base64上传文件,后台读取不文件格式
  • C# 判断文件是否存在和文件读写

    万次阅读 2017-03-05 22:32:28
    c#中操作IO非常简单,下面介绍如何判断文件夹或文件是否存在的方法。 代码如下:  //判断文件夹是否存在,存在则创建文件夹  if (!System.IO.Directory.Exists(@"E:\Files"))  {   System.IO.Directory....
  • C#判断文件格式

    千次阅读 2014-01-04 18:18:11
    文件格式 文件头 占的字节一样,譬如:jpg,2个字节;png,8个字节;gif,6个字节。 你只需要改变读取的字节数,在判断就可以了。 .exe "7790" .rar "8297" .gif files: "7173"  .ppt files: ...
  • Java读写TXT文件读取为数组格式返回) 实现代码: 读取文件成为数组类型: /* 读取文件 */ public static String[] readTxtFile(String filePath) { try { String encoding = "GBK"; File file = new ...
  • C++读写二进制格式文件

    千次阅读 2017-08-18 20:28:13
    在实际应用中,为了节约存储空间,文件多会以二进制格式保存,所以有必要了解如何在C++中读取二进制文件中的数据。
  • 判断读取文件结束的一点心得

    千次阅读 2014-04-01 12:42:07
    前两天,应用的时候都没有想起这个处理方式,后来发现文件读取有问题。找了相关资料,再加上看了一个提问(如何判断读取文件结束)中各位高手的见解。终于有了点眉目。 对于其他,上面那些高手说了很多,我也多说...
  • with open('awod.txt','rb') as f: print(f.seek(0,2))
  • 判断文件是否存在 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class Chapter3 { public static void main(Strin...
  • 按行遍历读取文件的方法,通过这个方法,readline() 每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline() filename = raw_input('Enter your file ...
  • java读取文件时,判断文件类型与后缀是否一致,若是人文手动修改文件后缀,将excel改成doc,那这时候校验出来的结果应该是文件格式与后缀一致这个结果。(使用只判断后缀名的方式)
  • C++判断文件编码格式

    千次阅读 2019-05-07 16:29:02
    ANSI: 无格式定义; Unicode: 前两个字节为FFFE; Unicode big endian: 前两字节为FEFF;  UTF-8: 前两字节为EFBB; #include <fstream> using namespace std; int main() { ifstream fin("C:/...
  • QT读写改XML格式文件

    2018-02-09 10:21:46
    最近因业务需要,需要更改XML文件中某一结点的值,于是搜索相关资料,但是网上搜出来资料的没有详细解释,好不容易才搞明白,因此,将代码上传,以供各位少走弯路。...2.读取一个XML文件。3.更改指定节点内容。
  • 文件读取判断是否读取到末尾

    千次阅读 2016-09-10 22:55:00
    int feof(FILE *fp); 返回值:  0:文件读取结束  1:文件读取结束 转载于:https://www.cnblogs.com/judes/p/5860594.html
  • C# 判断文件的编码格式

    千次阅读 2019-01-05 16:47:55
    可以用文件头部的BOM部分判断文件的编码格式 /// &lt;summary&gt; /// Determines a text file's encoding by analyzing its byte order mark (BOM). /// Defaults to ASCII when detection of the text...
  • 之前做的一个项目需要读取一个文件中的数据,文件中的数据类型确定,大小确定,每次读取完文件要计算出...判断文件结尾,结尾返回非零值,否则返回零值。 fscanf 函数原型:int fscanf (FILE *stream, char *forma...
  • 判断是否读取文件结尾问题

    万次阅读 2019-03-07 21:31:17
    在c语言中,判断文件结尾有两种方法,第一种是使用feof()函数,feof(fp)用于测试fp所指向的文件的当前状态是否为“文件结束”。如果是,函数则返回的是非0值(真),否则为0(假),要注意的是,feof()是先读文件在判断...
  • C语言判断文件编码格式

    千次阅读 2014-07-31 17:12:38
     功能:实现文件编码格式判断  通过一个文件的最前面三个字节,可以判断出该的编码类型:  ANSI: 无格式定义;(第一个字节开始就是文件内容)  Unicode: 前两个字节为FFFE;  Unicode big ...
  • C语言读取文件判断是否读取结束

    千次阅读 2019-09-07 15:44:16
    读取文件时,判断内容是否已经为空当目前所读取的字符为EOF时说明后面内容为空或者直接使用feof()函数 当目前所读取的字符为EOF时说明后面内容为空 char ch; FILE* fp=fopen(********); ch=fgetc(fp); if(ch==EOF) ...
  • js获取文件名: //校验 function check(){ ...//判断后缀是不是需要的文件类型  if(fileType != null && fileType != ""){  var start = fileType.lastIndexOf(".")+1; var length = fi
  • asp.net判断上传文件格式的方法

    千次阅读 2015-08-14 17:23:58
    ASP.NET中在判断文件格式时,如果通过截取扩展名来做判断、通过ContentType (MIME) 判断都太安全,因为这两种方式用户都可以伪造。 下面介绍通过byte获取文件类型,来做判断的方式   if (Request.Files....
  • c++判断文件编码格式

    万次阅读 热门讨论 2017-01-28 21:50:43
    记事本打开txt文件,然后另存,有四种编码格式可供选择,分别是: ANSI 无格式定义 对于中文编码格式是GB2312; Unicode 文本里前两个字节为FF FE 字节流是little endian Unicode big endian 文本里前两个字节为FE
  • 关于.gen格式的地图绘制以及地图投影转换,首先肯定是读取.gen格式,那么就得认识.gen格式内部数据样式,下面的图片给出的参考: 可以看到.gen格式文件由线、点数据,加上结束符end以及线的编号组成。那么我们就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 738,475
精华内容 295,390
关键字:

不判断格式文件读取