天天看點

處理CSV檔案

CSV檔案是簡化的電子表格,儲存為純文字檔案。

CSV檔案中的每行代表電子表格中的一行,都好分割了該行中的單元格。

CSV檔案是簡單的,缺少Excel電子表格的許多功能,但它是表示電子表格資料的直接方式。

CSV格式和它聲稱的完全一緻:它就是一個文本檔案,具有逗号分隔的值。

但并非CSV檔案中的每個逗号,都表示兩個單元格之間的分界。

因為split()方法不能處理CSV檔案的轉義字元,是以使用CSV子產品讀寫CSV檔案。

Reader對象

要用CSV子產品從CSV檔案中讀取資料,需要建立一個Reader對象。

Reader對象疊代周遊CSV檔案中的每一行。

CSV子產品是python自帶的,不需要安裝,直接導入可用。

不能将檔案名字字元串傳遞給csv.reader()函數。

樣例:

1

2

3

4

5

6

7

8

9

<code>&gt;&gt;&gt; </code><code>import</code> <code>csv</code>

<code>&gt;&gt;&gt; file1</code><code>=</code><code>open</code><code>(</code><code>'file1.csv'</code><code>)</code>

<code>&gt;&gt;&gt; file1Reader</code><code>=</code><code>csv.reader(file1)</code>

<code>&gt;&gt;&gt; file1Data</code><code>=</code><code>list</code><code>(file1Reader)</code>

<code>&gt;&gt;&gt; file1Data</code>

<code>[[</code><code>'1'</code><code>, </code><code>'張三'</code><code>, </code><code>'男'</code><code>, </code><code>'28'</code><code>], [</code><code>'2'</code><code>, </code><code>'李四'</code><code>, </code><code>'男'</code><code>, </code><code>'19'</code><code>], [</code><code>'3'</code><code>, </code><code>'王五'</code><code>, </code><code>'男'</code><code>, </code><code>'25'</code><code>], [</code><code>'4'</code><code>, </code><code>'趙六'</code><code>, </code><code>'男'</code><code>, </code><code>'35'</code><code>], [</code><code>'5'</code><code>, </code><code>'田七'</code><code>, </code><code>'男'</code><code>, </code><code>'54'</code><code>]]</code>

<code>&gt;&gt;&gt; file1Data[</code><code>2</code><code>][</code><code>1</code><code>]</code>

<code>'王五'</code>

<code>&gt;&gt;&gt;</code>

要取得行号,就使用Reader對象的line_num變量,它包含了目前行的編号。

Reader對象隻能循環周遊一次。要再次讀取CSV檔案,必須調用csv.reader,建立一個對象。

10

11

12

13

14

15

<code>&gt;&gt;&gt; </code><code>for</code> <code>row </code><code>in</code> <code>file1Reader:</code>

<code>...     </code><code>print</code><code>(</code><code>'Row #'</code><code>+</code><code>str</code><code>(file1Reader.line_num)</code><code>+</code><code>' '</code><code>+</code><code>str</code><code>(row))</code>

<code>...</code>

<code>Row </code><code>#1 ['1', '張三', '男', '28']</code>

<code>Row </code><code>#2 ['2', '李四', '男', '19']</code>

<code>Row </code><code>#3 ['3', '王五', '男', '25']</code>

<code>Row </code><code>#4 ['4', '趙六', '男', '35']</code>

<code>Row </code><code>#5 ['5', '田七', '男', '54']</code>

Writer對象

Writer對象将資料寫入CSV檔案。要建立一個Writer對象,就使用csv.writer()函數。

在windows上,需要為open()函數的newline關鍵字參數傳入一個空字元串。

如果忘記設定newline關鍵字參數,CSV檔案中的行距将有兩倍。

在CSV檔案中使用雙引号,防止逗号被自動轉義。

<code>&gt;&gt;&gt; file1</code><code>=</code><code>open</code><code>(</code><code>'file1.csv'</code><code>,</code><code>'w'</code><code>,newline</code><code>=</code><code>'')</code>

<code>&gt;&gt;&gt; file1Writer</code><code>=</code><code>csv.writer(file1)</code>

<code>&gt;&gt;&gt; file1Writer.writerow([</code><code>'1'</code><code>,</code><code>'Tom'</code><code>,</code><code>'male'</code><code>,</code><code>'22'</code><code>])</code>

<code>15</code>

<code>&gt;&gt;&gt; file1Writer.writerow([</code><code>'2'</code><code>,</code><code>'Jack'</code><code>,</code><code>'male'</code><code>,</code><code>'29'</code><code>])</code>

<code>16</code>

<code>&gt;&gt;&gt; file1Writer.writerow([</code><code>'3'</code><code>,</code><code>'Linda'</code><code>,</code><code>'female'</code><code>,</code><code>'37'</code><code>])</code>

<code>19</code>

<code>&gt;&gt;&gt; file1.close()</code>

本文轉自Grodd51CTO部落格,原文連結:http://blog.51cto.com/juispan/2071228,如需轉載請自行聯系原作者