❶ python按行讀取文件,如何去掉換行符"\n
換行符與其他字元並沒有區別
由於換行符總是最後一個字元,所有直接選擇除去最後一個字元的所有字元即可
x='abc '
x[:-1]
也可以使用字元串的strip方法
但是strip方法除了會去掉換行符還會去掉空格等其他字元
x.strip()
❷ 如何正確讀取csv文件
package xufei;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 文件規則
* Microsoft的格式是最簡單的。以逗號分隔的值要麼是「純粹的」(僅僅包含在括弧之前),
* 要麼是在雙引號之間(這時數據中的雙引號以一對雙引號表示)。
* Ten Thousand,10000, 2710 ,,"10,000","It's ""10 Grand"", baby",10K
* 這一行包含七個欄位(fields):
* Ten Thousand
* 10000
* 2710
* 空欄位
* 10,000
* It's "10 Grand", baby
* 10K
* 每條記錄佔一行
* 以逗號為分隔符
* 逗號前後的空格會被忽略
* 欄位中包含有逗號,該欄位必須用雙引號括起來。如果是全形的沒有問題。
* 欄位中包含有換行符,該欄位必須用雙引號括起來
* 欄位前後包含有空格,該欄位必須用雙引號括起來
* 欄位中的雙引號用兩個雙引號表示
* 欄位中如果有雙引號,該欄位必須用雙引號括起來
* 第一條記錄,可以是欄位名
*/
/**
*
タイトル: xufei.CSVAnalysis.java
*
說明:
*
著作権: Copyright (c) 2006
*
會社名: technodia
* @author 徐飛
* @version 1.0
* createDate Aug 11, 2008
* 修正履歴
* 修正日 修正者修正理由
*/
public class CSVAnalysis {
private InputStreamReader fr = null;
private BufferedReader br = null;
public CSVAnalysis(String f) throws IOException {
fr = new InputStreamReader(new FileInputStream(f));
}
/**
* 解析csv文件 到一個list中
* 每個單元個為一個String類型記錄,每一行為一個list。
* 再將所有的行放到一個總list中
* @return
* @throws IOException
*/
public List> readCSVFile() throws IOException {
br = new BufferedReader(fr);
String rec = null;//一行
String str;//一個單元格
List> listFile = new ArrayList>();
try {
//讀取一行
while ((rec = br.readLine()) != null) {
Pattern pCells = Pattern
.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,");
Matcher mCells = pCells.matcher(rec);
List cells = new ArrayList();//每行記錄一個list
//讀取每個單元格
while (mCells.find()) {
str = mCells.group();
str = str.replaceAll(
"(?sm)\"?([^\"]*(\"{2})*[^\"]*)\"?.*,", "$1");
str = str.replaceAll("(?sm)(\"(\"))", "$2");
cells.add(str);
}
listFile.add(cells);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fr != null) {
fr.close();
}
if (br != null) {
br.close();
}
}
return listFile;
}
public static void main(String[] args) throws Throwable {
CSVAnalysis parser = new CSVAnalysis("c:/test2.csv");
parser.readCSVFile();
}
}
❸ 關於C語言讀CSV文件的問題
csv文件即逗號分隔值文件。
逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。
純文本意味著該文件是一個字元序列,不含必須像二進制數字那樣被解讀的數據。
CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由欄位組成,欄位間的分隔符是其它字元或字元串,最常見的是逗號或製表符。通常,所有記錄都有完全相同的欄位序列。
要用C語言讀取CSV,首先需要確定文件中定義的字元分隔值,以及每一行各個列的元素格式。
如果所有的元素格式相同,那麼可以每行一個一維數組,所有行組成一個二維數組,逐個元素進行讀取。
如果元素格式不同,可以按照元素類型,構建一個結構體,每行讀到一個結構體變數中,所有行組成一個結構體數組。
下面根據兩種情況,按照分隔符為逗號(,),分別舉一個例子:
文件名設定為in.csv,每行10個元素。
一、所有元素均相同類型,比如int型。
#include<stdio.h>
intmain()
{
FILE*fp;
inta[100][10];//定義一個足夠大的數組來存儲。
intline=0;
intc,i;
fp=fopen("in.csv","r");//以文本方式打開。
if(fp==NULL)return-1;//打開文件失敗。
while(1)
{
i=0;//列標記清零。
while(1)
{
fscanf(fp,"%d",&a[line][i]);//從文件中讀取一個元素。
c=getchar();//讀取下一個字元,可能是分隔符,換行符或文件結尾。
if(c==' '||c==EOF)break;//讀完一行,或者到文件結尾,退出讀取。
i++;
}
line++;
if(c==EOF)break;
}
fclose(fp);//關閉文件。
//以下循環用來列印所有讀到的值。
for(i=0;i<line;i++)
{
for(c=0;c<10;c++)
printf("%d",a[i][c]);
printf(" ");
}
}
二、每行元素不同。
比如共三列,第一列是int型,第二列是字元串,第三列是float型。
如果分隔符不是空白字元,或者字元串元素中可能存在除分隔符外的其它空白字元,在讀取字元串的時候是不能用fscanf函數的。
定義結構體如下
strcutdata
{
inta;
chars[100];//根據實際要求,定義足夠大的字元數組。
floatf;
};
讀取代碼如下:
#include<stdio.h>
intmain()
{
FILE*fp;
strcutdataa[100];//定義一個足夠大的結構體一維數組來存儲。
intline=0;
intc,i;
fp=fopen("in.csv","r");//以文本方式打開。
if(fp==NULL)return-1;//打開文件失敗。
while(1)
{
fscanf(fp,"%d",&a[line].a);//從文件中讀取第一個元素。
c=getchar();//讀取分隔符。
//接下來要讀取字元串,需要逐個字元讀入,直到出現分隔符為止。
i=0;
while(1)
{
a[line].s[i]=getchar();//讀入一個字元。
if(a[line].s[i]==',')//發現分隔符
{
a[line].s[i]='