Oral  Brekke

Oral Brekke

1625117858

Read and Write to S3 Buckets via NodeJS

We at H+S are dedicated to one simple cause: creating posts about oddly specific programming scenarios. Somewhere in the world as sad soul is looking to programmatically access files from an S3 server while keeping their bucket private. To that person: we heard you.

There are plenty of reasons you’d want to access files in S3. For example, let’s say you read that post about using Pandas in a Lambda function. Since you’re already familiar with PyMySQL, you may hypothetically be in a position to export data from a DB query to a CSV saved in S3. I bet you can guess what I’ve been doing lately.

Configure the AWS CLI on your VPS

The easiest and safest way to interact with other AWS services on your EC2 instance (or VPS of choice) is via the AWS CLI. This is easily installed as a global Python3 library:

$ pip3 install awscli

With the CLI installed we’ll be able to do something truly magical: set our AWS configuration globally. This means that any time we use interact with a microservice (such as S3), the boto3 library will always look to the files stored in ~/.aws/ for our keys and secrets, without us specifying. This critical from a security perspective as it removes all mentions of credentials from our codebase: including the location of said secrets.

#nodejs #aws #expressjs #javascript #node

What is GEEK

Buddha Community

Read and Write to S3 Buckets via NodeJS
Desmond  Gerber

Desmond Gerber

1680009180

How to CSV Processing using Python

Throughout this tutorial, we will explore methods for reading, writing, and editing CSV (Comma-Separated Values) files using the Python standard library “csv”.

Due to the popularity of CSV files for databasing, these methods will prove crucial to programmers across different fields of work.

CSV files are not standardized. Regardless, there are some common structures seen in all sorts of CSV files. In most cases, the first line of a CSV file is reserved for the headers of the columns of the files.

The lines following each form a row of the data where the fields are sorted in the order matching the first row. As the name suggests, data values are usually separated by a comma, however, other delimiters can be used.

Lastly, some CSV files will use double quotes when key characters are being used within a field.

All the examples used throughout this tutorial will be based on the following dummy data files: basic.csvmultiple_delimiters.csv, and new_delimiter.csv.

Read CSV (With Header or Without)

First, we will examine the simplest case: reading an entire CSV file and printing each item read in.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      for col in row:
         print(col,end=" ")
      print()

Let us break down this code. The only library needed to work with CSV files is the “csv” Python library. After importing the library and setting the path of our CSV file, we use the “open()” method to begin reading the file line by line.

The parsing of the CSV file is handled by the “csv.reader()” method which is discussed in detail later.

Each row of our CSV file will be returned as a list of strings that can be handled in any way you please. Here is the output of the code above:

Frequently in practice, we do not wish to store the headers of the columns of the CSV file. It is standard to store the headers on the first line of the CSV.

Luckily, “csv.reader()” tracks how many lines have been read in the “line_num” object. Using this object, we can simply skip the first line of the CSV file.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
reader = csv.reader(csvfile)
   for row in reader:
   if(reader.line_num != 1):
      for col in row:
         print(col,end=" ")
      print()

CSV Reader Encoding

In the code above, we create an object called “reader” which is assigned the value returned by “csv.reader()”.

reader = csv.reader(csvfile)

The “csv.reader()” method takes a few useful parameters. We will only focus on two: the “delimiter” parameter and the “quotechar”. By default, these parameters take the values “,” and ‘”‘.

We will discuss the delimiter parameter in the next section.

The “quotechar” parameter is a single character that is used to define fields with special characters. In our example, all our header files have these quote characters around them.

This allows us to include a space character in the header “Favorite Color”. Notice how the result changes if we change our “quotechar” to the “|” symbol.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, quotechar='|')
   for row in reader:
      if(reader.line_num != 0):
      for col in row:
         print(col,end="\t")
      print()

Changing the “quotechar” from ‘”‘ to “|” resulted in the double quotes appearing around the headers.

Reading a Single Column

Reading a single column from a CSV is simple using our method above. Our row elements are a list containing the column elements.

Therefore, instead of printing out the entire row, we will only print out the desired column element from each row. For our example, we will print out the second column.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, delimiter=',')
   for row in reader:
      print(row[1])

CSV Custom Delimiter

CSV files frequently use the “,” symbol to distinguish between data values. In fact, the comma symbol is the default delimiter for the csv.reader() method.

In practice though, data files may use other symbols to distinguish between data values. For example, examine the contents of a CSV file (called new_delimiter.csv) which uses “;” to delimit between data values.

Reading in this CSV file to Python is simple if we alter the “delimiter” parameter of the “csv.reader()” method.

reader = csv.reader(csvfile, delimiter=';')

Notice how we changed the delimiter argument from “,” to “;”. The “csv.reader()” method will parse our CSV file as expected with this simple change.

import csv
path = "data/new_delimiter.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, delimiter=';')
   for row in reader:
      if(reader.line_num != 0):
      for col in row:
         print(col,end="\t")
      print()

CSV with Multiple Delimiters

The standard CSV package in python cannot handle multiple delimiters. In order to deal with such cases, we will use the standard package “re”.

The following example parses the CSV file “multiple_delimiters.csv”. Looking at the structure of the data in “multiple_delimters.csv”, we see the headers are delimited with commas and the remaining rows are delimited with a comma, a vertical bar, and the text “Delimiter”.

The core function to accomplishing the desired parsing is the “re.split()” method which will take two strings as arguments: a highly structured string denoting the delimiters and a string to be split at those delimiters. First, let us see the code and output.

import re
path = "data/multiple_delimiters.csv"
with open(path, newline='') as csvfile:
   for row in csvfile:
      row = re.split('Delimiter|[|]|,|\n', row)
      for field in row:
         print(field, end='\t')
      print()

The key component of this code is the first parameter of “re.split()”.

 'Delimiter|[|]|,|\n'

Each split point is separated by the symbol “|”. Since this symbol is also a delimiter in our text, we must put brackets around it to escape the character.

Lastly, we put the “\n” character as a delimiter so that the newline will not be included in the final field of each row. To see the importance of this, examine the result without “\n” included as a split point.

import re
path = "data/multiple_delimiters.csv"
with open(path, newline='') as csvfile:
   for row in csvfile:
      row = re.split('Delimiter|[|]|,', row)
      for field in row:
         print(field, end='\t')
      print()

Notice the extra spacing between each row of our output.

Writing to a CSV File

Writing to a CSV file will follow a similar structure to how we read the file. However, instead of printing the data, we will use the “writer” object within “csv” to write the data.

First, we will do the simplest example possible: creating a CSV file and writing a header and some data in it.

import csv
path = "data/write_to_file.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(['h1'] + ['h2'] + ['h3'])
   i = 0
   while i < 5:
      writer.writerow([i] + [i+1] + [i+2])
      i = i+1

In this example, we instantiate the “writer” object with the “csv.writer()” method. After doing so, simply calling the “writerow()” method will write the list of strings onto the next row in our file with the default delimiter “,” placed between each field element.

Editing the contents of an existing CSV file will require the following steps: read in the CSV file data, edit the lists (Update information, append new information, delete information), and then write the new data back to the CSV file.

For our example, we will be editing the file created in the last section “write_to_file.csv”.

Our goal will be to double the values of the first row of data, delete the second row, and append a row of data at the end of the file.

import csv
path = "data/write_to_file.csv"
#Read in Data
rows = []
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      rows.append(row)
#Edit the Data
rows[1] = ['0','2','4']
del rows[2]
rows.append(['8','9','10'])
#Write the Data to File
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerows(rows)

Using the techniques discussed in the prior sections, we read the data and stored the lists in a variable called “rows”. Since all the elements were Python lists, we made the edits using standard list methods.

We opened the file in the same manner as before. The only difference when writing was our use of the “writerows()” method instead of the “writerow()” method.

Search & Replace CSV File

We have created a natural way to search and replace a CSV file through the process discussed in the last section. In the example above, we read each line of the CSV file into a list of lists called “rows”.

Since “rows” is a list object, we can use Pythons list methods to edit our CSV file before writing it back to a file. We used some list methods in the example, but another useful method is the “list.replace()” method which takes two arguments: first a string to be found, and then the string to replace the found string with.

For example, to replace all ‘3’s with ’10’s we could have done

for row in rows:
   row = [field.replace('3','10') for field in row]

Similarly, if the data is imported as a dictionary object (as discussed later), we can use Python’s dictionary methods to edit the data before re-writing to the file.

Python Dictionary to CSV (DictWriter)

Pythons “csv” library also provides a convenient method for writing dictionaries into a CSV file.

import csv
Dictionary1 = {'header1': '5', 'header2': '10', 'header3': '13'}
Dictionary2 = {'header1': '6', 'header2': '11', 'header3': '15'}
Dictionary3 = {'header1': '7', 'header2': '18', 'header3': '17'}
Dictionary4 = {'header1': '8', 'header2': '13', 'header3': '18'}
path = "data/write_to_file.csv"
with open(path, 'w', newline='') as csvfile:
   headers = ['header1', 'header2', 'header3']
   writer = csv.DictWriter(csvfile, fieldnames=headers)
   writer.writeheader()
   writer.writerow(Dictionary1)
   writer.writerow(Dictionary2)
   writer.writerow(Dictionary3)
   writer.writerow(Dictionary4)

In this example, we have four dictionaries with the same keys. It is crucial that the keys match the header names you want in the CSV file.

Since we will be inputting our rows as dictionary objects, we instantiate our writer object with the “csv.DictWriter()” method and specify our headers.

After this is done, it is as simple as calling the “writerow()” method to begin writing to our CSV file.

CSV to Python Dictionary (DictReader)

The CSV library also provides an intuitive “csv.DictReader()” method which inputs the rows from a CSV file into a dictionary object. Here is a simple example.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.DictReader(csvfile, delimiter=',')
   for row in reader:
      print(row)

As we can see in the output, each row was stored as a dictionary object.

Split Large CSV File

If we wish to split a large CSV file into smaller CSV files, we use the following steps: input the file as a list of rows, write the first half of the rows to one file and write the second half of the rows to another.

Here is a simple example where we turn “basic.csv” into “basic_1.csv” and “basic_2.csv”.

import csv
path = "data/basic.csv"
#Read in Data
rows = []
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      rows.append(row)
Number_of_Rows = len(rows)
#Write Half of the Data to a File
path = "data/basic_1.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(rows[0]) #Header
   for row in rows[1:int((Number_of_Rows+1)/2)]:
      writer.writerow(row)
#Write the Second Half of the Data to a File
path = "data/basic_2.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(rows[0]) #Header
   for row in rows[int((Number_of_Rows+1)/2):]:
      writer.writerow(row)

basic_1.csv:

basic_2.csv:

In these examples, no new methods were used. Instead, we had two separate while loops for handling the first and second half of writing to the two CSV files.

Original article source at: https://likegeeks.com/

#python #csv 

田辺  桃子

田辺 桃子

1680009431

如何使用 Python 处理 CSV

在本教程中,我们将探索使用 Python 标准库“csv”读取、写入和编辑 CSV(逗号分隔值)文件的方法。

由于用于数据库的 CSV 文件的流行,这些方法将证明对不同工作领域的程序员至关重要。

CSV 文件未标准化。无论如何,在各种 CSV 文件中都可以看到一些常见的结构。在大多数情况下,CSV 文件的第一行是为文件列的标题保留的。

每行后面的行形成一行数据,其中字段按照与第一行匹配的顺序排序。顾名思义,数据值通常用逗号分隔,但也可以使用其他分隔符。

最后,当在字段中使用关键字符时,某些 CSV 文件将使用双引号。

本教程中使用的所有示例都将基于以下虚拟数据文件:  basic.csv、  multiple_delimiters.csv和 new_delimiter.csv

读取 CSV(带标题或不带标题)

首先,我们将检查最简单的情况:读取整个 CSV 文件并打印读取的每个项目。

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      for col in row:
         print(col,end=" ")
      print()

让我们分解这段代码。处理 CSV 文件所需的唯一库是“csv”Python 库。导入库并设置 CSV 文件的路径后,我们使用“open()”方法开始逐行读取文件。

CSV 文件的解析由稍后详细讨论的“csv.reader()”方法处理。

我们的 CSV 文件的每一行都将作为字符串列表返回,您可以按照您喜欢的任何方式处理这些字符串。这是上面代码的输出:

通常在实践中,我们不希望存储 CSV 文件的列标题。将标头存储在 CSV 的第一行是标准的。

幸运的是,“csv.reader()”跟踪在“line_num”对象中读取了多少行。使用这个对象,我们可以简单地跳过 CSV 文件的第一行。

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
reader = csv.reader(csvfile)
   for row in reader:
   if(reader.line_num != 1):
      for col in row:
         print(col,end=" ")
      print()

CSV 阅读器编码

在上面的代码中,我们创建了一个名为“reader”的对象,它被赋予了“csv.reader()”返回的值。

reader = csv.reader(csvfile)

“csv.reader()”方法采用一些有用的参数。我们将只关注两个:“delimiter”参数和“quotechar”。默认情况下,这些参数采用值“,”和“”'。

我们将在下一节讨论定界符参数。

“quotechar”参数是单个字符,用于定义具有特殊字符的字段。在我们的例子中,我们所有的头文件都有这些引号字符。

这允许我们在标题“Favorite Color”中包含一个空格字符。如果我们将“quotechar”更改为“|”,请注意结果如何变化 象征。

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, quotechar='|')
   for row in reader:
      if(reader.line_num != 0):
      for col in row:
         print(col,end="\t")
      print()

将“quotechar”从“””更改为“|” 导致标题周围出现双引号。

阅读单列

使用我们上面的方法从 CSV 中读取单个列很简单。我们的行元素是一个包含列元素的列表。

因此,我们不会打印出整行,而是只会打印出每一行中所需的列元素。对于我们的示例,我们将打印出第二列。

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, delimiter=',')
   for row in reader:
      print(row[1])

CSV 自定义分隔符

CSV 文件经常使用“,”符号来区分数据值。事实上,逗号是 csv.reader() 方法的默认分隔符。

但在实践中,数据文件可能会使用其他符号来区分数据值。例如,检查使用“;”的 CSV 文件(称为 new_delimiter.csv)的内容 分隔数据值。

如果我们改变“csv.reader()”方法的“delimiter”参数,将这个 CSV 文件读入 Python 很简单。

reader = csv.reader(csvfile, delimiter=';')

请注意我们如何将定界符参数从“,”更改为“;”。通过这个简单的更改,“csv.reader()”方法将按预期解析我们的 CSV 文件。

import csv
path = "data/new_delimiter.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, delimiter=';')
   for row in reader:
      if(reader.line_num != 0):
      for col in row:
         print(col,end="\t")
      print()

具有多个分隔符的 CSV

python 中的标准 CSV 包无法处理多个分隔符。为了处理这种情况,我们将使用标准包“re”。

以下示例解析 CSV 文件“multiple_delimiters.csv”。查看“multiple_delimters.csv”中的数据结构,我们看到标题用逗号分隔,其余行用逗号、竖线和文本“Delimiter”分隔。

完成所需解析的核心函数是“re.split()”方法,它将两个字符串作为参数:一个高度结构化的字符串表示分隔符和一个要在这些分隔符处拆分的字符串。首先,让我们看看代码和输出。

import re
path = "data/multiple_delimiters.csv"
with open(path, newline='') as csvfile:
   for row in csvfile:
      row = re.split('Delimiter|[|]|,|\n', row)
      for field in row:
         print(field, end='\t')
      print()

这段代码的关键部分是“re.split()”的第一个参数。

 'Delimiter|[|]|,|\n'

每个分割点之间用符号“|”隔开。由于这个符号在我们的文本中也是一个分隔符,所以我们必须在它周围加上括号来转义这个字符。

最后,我们将“\n”字符作为分隔符,这样换行符就不会包含在每一行的最后一个字段中。要了解这一点的重要性,请检查不包含“\n”作为分割点的结果。

import re
path = "data/multiple_delimiters.csv"
with open(path, newline='') as csvfile:
   for row in csvfile:
      row = re.split('Delimiter|[|]|,', row)
      for field in row:
         print(field, end='\t')
      print()

注意我们输出的每一行之间的额外间距。

写入 CSV 文件

写入 CSV 文件将遵循与我们读取文件的方式类似的结构。但是,我们将使用“csv”中的“writer”对象来写入数据,而不是打印数据。

首先,我们将做最简单的示例:创建一个 CSV 文件并在其中写入标题和一些数据。

import csv
path = "data/write_to_file.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(['h1'] + ['h2'] + ['h3'])
   i = 0
   while i < 5:
      writer.writerow([i] + [i+1] + [i+2])
      i = i+1

在此示例中,我们使用“csv.writer()”方法实例化“writer”对象。这样做之后,只需调用“writerow()”方法即可将字符串列表写入我们文件的下一行,默认分隔符“,”位于每个字段元素之间。

编辑现有 CSV 文件的内容需要以下步骤:读入 CSV 文件数据、编辑列表(更新信息、追加新信息、删除信息),然后将新数据写回 CSV 文件。

对于我们的示例,我们将编辑在上一节“write_to_file.csv”中创建的文件。

我们的目标是将第一行数据的值加倍,删除第二行,并在文件末尾追加一行数据。

import csv
path = "data/write_to_file.csv"
#Read in Data
rows = []
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      rows.append(row)
#Edit the Data
rows[1] = ['0','2','4']
del rows[2]
rows.append(['8','9','10'])
#Write the Data to File
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerows(rows)

使用前面部分讨论的技术,我们读取数据并将列表存储在一个名为“行”的变量中。由于所有元素都是 Python 列表,我们使用标准列表方法进行了编辑。

我们以与之前相同的方式打开文件。写入时的唯一区别是我们使用“writerows()”方法而不是“writerow()”方法。

搜索和替换 CSV 文件

通过上一节中讨论的过程,我们创建了一种搜索和替换 CSV 文件的自然方式。在上面的示例中,我们将 CSV 文件的每一行读入称为“行”的列表列表中。

由于“行”是一个列表对象,我们可以使用Python 的列表方法在将 CSV 文件写回文件之前对其进行编辑。我们在示例中使用了一些列表方法,但另一个有用的方法是“list.replace()”方法,它有两个参数:第一个是要找到的字符串,然后是用于替换找到的字符串的字符串。

例如,要将所有“3”替换为“10”,我们可以这样做

for row in rows:
   row = [field.replace('3','10') for field in row]

同样,如果数据作为字典对象导入(稍后讨论),我们可以使用 Python 的字典方法在重新写入文件之前编辑数据。

Python 字典到 CSV (DictWriter)

Python 的“csv”库还提供了一种将字典写入 CSV 文件的便捷方法。

import csv
Dictionary1 = {'header1': '5', 'header2': '10', 'header3': '13'}
Dictionary2 = {'header1': '6', 'header2': '11', 'header3': '15'}
Dictionary3 = {'header1': '7', 'header2': '18', 'header3': '17'}
Dictionary4 = {'header1': '8', 'header2': '13', 'header3': '18'}
path = "data/write_to_file.csv"
with open(path, 'w', newline='') as csvfile:
   headers = ['header1', 'header2', 'header3']
   writer = csv.DictWriter(csvfile, fieldnames=headers)
   writer.writeheader()
   writer.writerow(Dictionary1)
   writer.writerow(Dictionary2)
   writer.writerow(Dictionary3)
   writer.writerow(Dictionary4)

在此示例中,我们有四个具有相同键的字典。密钥必须与 CSV 文件中所需的标头名称匹配,这一点至关重要。

由于我们将输入我们的行作为字典对象,我们使用“csv.DictWriter()”方法实例化我们的 writer 对象并指定我们的标题。

完成后,只需调用“writerow()”方法即可开始写入我们的 CSV 文件。

CSV 到 Python 字典 (DictReader)

CSV 库还提供了一种直观的“csv.DictReader()”方法,可将 CSV 文件中的行输入到字典对象中。这是一个简单的例子。

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.DictReader(csvfile, delimiter=',')
   for row in reader:
      print(row)

正如我们在输出中看到的,每一行都存储为一个字典对象。

拆分大型 CSV 文件

如果我们希望将一个大的 CSV 文件拆分成多个较小的 CSV 文件,我们使用以下步骤:将文件作为行列表输入,将前半部分行写入一个文件,将后半部分行写入另一个文件。

这是一个简单的示例,我们将“basic.csv”转换为“basic_1.csv”和“basic_2.csv”。

import csv
path = "data/basic.csv"
#Read in Data
rows = []
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      rows.append(row)
Number_of_Rows = len(rows)
#Write Half of the Data to a File
path = "data/basic_1.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(rows[0]) #Header
   for row in rows[1:int((Number_of_Rows+1)/2)]:
      writer.writerow(row)
#Write the Second Half of the Data to a File
path = "data/basic_2.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(rows[0]) #Header
   for row in rows[int((Number_of_Rows+1)/2):]:
      writer.writerow(row)

basic_1.csv:

basic_2.csv:

在这些例子中,没有使用新的方法。相反,我们有两个单独的 while 循环来处理写入两个 CSV 文件的前半部分和后半部分。

文章原文出处:https: //likegeeks.com/

#python #csv 

Как обрабатывать CSV с помощью Python

В этом руководстве мы рассмотрим методы чтения, записи и редактирования файлов CSV (значения, разделенные запятыми) с использованием стандартной библиотеки Python «csv».

Из-за популярности CSV-файлов для баз данных эти методы окажутся крайне важными для программистов в различных сферах деятельности.

Файлы CSV не стандартизированы. Несмотря на это, есть некоторые общие структуры, встречающиеся во всех типах CSV-файлов. В большинстве случаев первая строка файла CSV зарезервирована для заголовков столбцов файлов.

Строки, следующие за каждой, образуют строку данных, в которой поля отсортированы в порядке, соответствующем первой строке. Как следует из названия, значения данных обычно разделяются запятой, однако можно использовать и другие разделители.

Наконец, некоторые файлы CSV будут использовать двойные кавычки, когда ключевые символы используются в поле.

Все примеры, используемые в этом руководстве, будут основаны на следующих фиктивных файлах данных:  basic.csvmultiple_delimiters.csv и  new_delimiter.csv .

Чтение CSV (с заголовком или без)

Сначала мы рассмотрим самый простой случай: чтение всего CSV-файла и печать каждого прочитанного элемента.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      for col in row:
         print(col,end=" ")
      print()

Давайте разберем этот код. Единственная библиотека, необходимая для работы с файлами CSV, — это библиотека Python «csv». После импорта библиотеки и установки пути к нашему CSV-файлу мы используем метод «open()», чтобы начать чтение файла построчно.

Анализ CSV-файла обрабатывается методом «csv.reader()», который подробно обсуждается позже.

Каждая строка нашего CSV-файла будет возвращена в виде списка строк, которые можно обрабатывать любым удобным для вас способом. Вот вывод кода выше:

На практике мы часто не хотим хранить заголовки столбцов CSV-файла. Стандартно хранить заголовки в первой строке CSV.

К счастью, «csv.reader()» отслеживает, сколько строк было прочитано в объекте «line_num». Используя этот объект, мы можем просто пропустить первую строку CSV-файла.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
reader = csv.reader(csvfile)
   for row in reader:
   if(reader.line_num != 1):
      for col in row:
         print(col,end=" ")
      print()

Кодирование считывателя CSV

В приведенном выше коде мы создаем объект с именем «reader», которому присваивается значение, возвращаемое «csv.reader()».

reader = csv.reader(csvfile)

Метод csv.reader() принимает несколько полезных параметров. Мы сосредоточимся только на двух: параметре «разделитель» и «кавычках». По умолчанию эти параметры принимают значения «,» и «»».

Мы обсудим параметр разделителя в следующем разделе.

Параметр «quotechar» — это один символ, который используется для определения полей со специальными символами. В нашем примере все наши заголовочные файлы окружены этими символами кавычек.

Это позволяет нам включать пробел в заголовок «Любимый цвет». Обратите внимание, как изменится результат, если мы изменим наш «кавычки» на «|» символ.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, quotechar='|')
   for row in reader:
      if(reader.line_num != 0):
      for col in row:
         print(col,end="\t")
      print()

Изменение «quotechar» с «» на «|» привело к появлению двойных кавычек вокруг заголовков.

Чтение одного столбца

Чтение одного столбца из CSV очень просто с помощью описанного выше метода. Наши элементы строки представляют собой список , содержащий элементы столбца.

Поэтому вместо того, чтобы печатать всю строку, мы будем печатать только нужный элемент столбца из каждой строки. В нашем примере мы распечатаем второй столбец.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, delimiter=',')
   for row in reader:
      print(row[1])

Пользовательский разделитель CSV

Файлы CSV часто используют символ «, чтобы различать значения данных. На самом деле запятая является разделителем по умолчанию для метода csv.reader().

Однако на практике файлы данных могут использовать другие символы для различения значений данных. Например, проверьте содержимое CSV-файла (называемого new_delimiter.csv), в котором используется символ «;». для разграничения между значениями данных.

Чтение этого CSV-файла в Python упрощается, если мы изменим параметр «разделитель» метода «csv.reader()».

reader = csv.reader(csvfile, delimiter=';')

Обратите внимание, как мы изменили аргумент-разделитель с «,» на «;». Метод «csv.reader()» будет анализировать наш CSV-файл, как и ожидалось, с этим простым изменением.

import csv
path = "data/new_delimiter.csv"
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile, delimiter=';')
   for row in reader:
      if(reader.line_num != 0):
      for col in row:
         print(col,end="\t")
      print()

CSV с несколькими разделителями

Стандартный пакет CSV в python не может обрабатывать несколько разделителей. Для борьбы с такими случаями воспользуемся стандартным пакетом «re».

В следующем примере анализируется CSV-файл «multiple_delimiters.csv». Глядя на структуру данных в «multiple_delimters.csv», мы видим, что заголовки разделены запятыми, а остальные строки разделены запятой, вертикальной чертой и текстом «Разделитель».

Основной функцией для выполнения желаемого синтаксического анализа является метод «re.split()», который принимает две строки в качестве аргументов: строго структурированную строку, обозначающую разделители, и строку, которая будет разделена по этим разделителям. Во-первых, давайте посмотрим код и вывод.

import re
path = "data/multiple_delimiters.csv"
with open(path, newline='') as csvfile:
   for row in csvfile:
      row = re.split('Delimiter|[|]|,|\n', row)
      for field in row:
         print(field, end='\t')
      print()

Ключевым компонентом этого кода является первый параметр «re.split()».

 'Delimiter|[|]|,|\n'

Каждая точка разделения отделяется символом «|». Поскольку этот символ также является разделителем в нашем тексте, мы должны заключить его в скобки, чтобы экранировать символ.

Наконец, мы помещаем символ «\n» в качестве разделителя, чтобы новая строка не включалась в последнее поле каждой строки. Чтобы увидеть важность этого, изучите результат без «\n», включенного в качестве точки разделения.

import re
path = "data/multiple_delimiters.csv"
with open(path, newline='') as csvfile:
   for row in csvfile:
      row = re.split('Delimiter|[|]|,', row)
      for field in row:
         print(field, end='\t')
      print()

Обратите внимание на дополнительный интервал между каждой строкой нашего вывода.

Запись в файл CSV

Запись в файл CSV будет следовать структуре, аналогичной тому, как мы читаем файл. Однако вместо того, чтобы печатать данные, мы будем использовать объект «запись» в «csv» для записи данных.

Сначала мы сделаем самый простой пример: создадим файл CSV и запишем в него заголовок и некоторые данные.

import csv
path = "data/write_to_file.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(['h1'] + ['h2'] + ['h3'])
   i = 0
   while i < 5:
      writer.writerow([i] + [i+1] + [i+2])
      i = i+1

В этом примере мы создаем экземпляр объекта «писатель» с помощью метода «csv.writer ()». После этого простой вызов метода «writerow()» запишет список строк в следующую строку в нашем файле с разделителем по умолчанию «», помещенным между каждым элементом поля.

Для редактирования содержимого существующего CSV-файла потребуются следующие шаги: прочитать данные CSV-файла, отредактировать списки ( обновить информацию, добавить новую информацию, удалить информацию), а затем записать новые данные обратно в CSV-файл.

В нашем примере мы будем редактировать файл, созданный в последнем разделе «write_to_file.csv».

Нашей целью будет удвоить значения первой строки данных, удалить вторую строку и добавить строку данных в конец файла.

import csv
path = "data/write_to_file.csv"
#Read in Data
rows = []
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      rows.append(row)
#Edit the Data
rows[1] = ['0','2','4']
del rows[2]
rows.append(['8','9','10'])
#Write the Data to File
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerows(rows)

Используя методы, описанные в предыдущих разделах, мы считывали данные и сохраняли списки в переменной с именем «строки». Поскольку все элементы были списками Python, мы внесли изменения, используя стандартные методы списка.

Мы открыли файл так же, как и раньше. Единственная разница при написании заключалась в том, что мы использовали метод «writerows()» вместо метода «writerow()».

Поиск и замена CSV-файла

Мы создали естественный способ поиска и замены CSV-файла с помощью процесса, описанного в предыдущем разделе. В приведенном выше примере мы читаем каждую строку CSV-файла в список списков, называемых «строками».

Поскольку «строки» — это объект списка, мы можем использовать методы списка Python для редактирования нашего CSV-файла, прежде чем записывать его обратно в файл. В этом примере мы использовали несколько методов списка, но еще одним полезным методом является метод «list.replace()», который принимает два аргумента: сначала строку, которую нужно найти, а затем строку, которой нужно заменить найденную строку.

Например, чтобы заменить все «3» на «10», мы могли бы сделать

for row in rows:
   row = [field.replace('3','10') for field in row]

Точно так же, если данные импортируются как объект словаря (как обсуждается позже), мы можем использовать методы словаря Python для редактирования данных перед повторной записью в файл.

Словарь Python в CSV (DictWriter)

Библиотека Python «csv» также предоставляет удобный метод записи словарей в файл CSV.

import csv
Dictionary1 = {'header1': '5', 'header2': '10', 'header3': '13'}
Dictionary2 = {'header1': '6', 'header2': '11', 'header3': '15'}
Dictionary3 = {'header1': '7', 'header2': '18', 'header3': '17'}
Dictionary4 = {'header1': '8', 'header2': '13', 'header3': '18'}
path = "data/write_to_file.csv"
with open(path, 'w', newline='') as csvfile:
   headers = ['header1', 'header2', 'header3']
   writer = csv.DictWriter(csvfile, fieldnames=headers)
   writer.writeheader()
   writer.writerow(Dictionary1)
   writer.writerow(Dictionary2)
   writer.writerow(Dictionary3)
   writer.writerow(Dictionary4)

В этом примере у нас есть четыре словаря с одинаковыми ключами. Крайне важно, чтобы ключи соответствовали именам заголовков, которые вы хотите использовать в CSV-файле.

Поскольку мы будем вводить наши строки как объекты словаря, мы создаем экземпляр нашего объекта записи с помощью метода «csv.DictWriter()» и указываем наши заголовки.

После того, как это будет сделано, достаточно просто вызвать метод «writerow()», чтобы начать запись в наш CSV-файл.

Словарь CSV в Python (DictReader)

Библиотека CSV также предоставляет интуитивно понятный метод «csv.DictReader()», который вводит строки из файла CSV в объект словаря. Вот простой пример.

import csv
path = "data/basic.csv"
with open(path, newline='') as csvfile:
   reader = csv.DictReader(csvfile, delimiter=',')
   for row in reader:
      print(row)

Как видно из вывода, каждая строка была сохранена как объект словаря.

Разделить большой файл CSV

Если мы хотим разделить большой CSV-файл на более мелкие CSV-файлы, мы используем следующие шаги: введите файл в виде списка строк, запишите первую половину строк в один файл и запишите вторую половину строк в другой.

Вот простой пример, где мы превращаем «basic.csv» в «basic_1.csv» и «basic_2.csv».

import csv
path = "data/basic.csv"
#Read in Data
rows = []
with open(path, newline='') as csvfile:
   reader = csv.reader(csvfile)
   for row in reader:
      rows.append(row)
Number_of_Rows = len(rows)
#Write Half of the Data to a File
path = "data/basic_1.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(rows[0]) #Header
   for row in rows[1:int((Number_of_Rows+1)/2)]:
      writer.writerow(row)
#Write the Second Half of the Data to a File
path = "data/basic_2.csv"
with open(path, 'w', newline='') as csvfile:
   writer = csv.writer(csvfile)
   writer.writerow(rows[0]) #Header
   for row in rows[int((Number_of_Rows+1)/2):]:
      writer.writerow(row)

basic_1.csv:

basic_2.csv:

В этих примерах не использовались никакие новые методы. Вместо этого у нас было два отдельных цикла while для обработки первой и второй половины записи в два CSV-файла.

Оригинальный источник статьи: https://likegeeks.com/

#python #csv 

Hire NodeJs Developer

Looking to build dynamic, extensively featured, and full-fledged web applications?

Hire NodeJs Developer to create a real-time, faster, and scalable application to accelerate your business. At HourlyDeveloper.io, we have a team of expert Node.JS developers, who have experience in working with Bootstrap, HTML5, & CSS, and also hold the knowledge of the most advanced frameworks and platforms.

Contact our experts: https://bit.ly/3hUdppS

#hire nodejs developer #nodejs developer #nodejs development company #nodejs development services #nodejs development #nodejs

Oral  Brekke

Oral Brekke

1625117858

Read and Write to S3 Buckets via NodeJS

We at H+S are dedicated to one simple cause: creating posts about oddly specific programming scenarios. Somewhere in the world as sad soul is looking to programmatically access files from an S3 server while keeping their bucket private. To that person: we heard you.

There are plenty of reasons you’d want to access files in S3. For example, let’s say you read that post about using Pandas in a Lambda function. Since you’re already familiar with PyMySQL, you may hypothetically be in a position to export data from a DB query to a CSV saved in S3. I bet you can guess what I’ve been doing lately.

Configure the AWS CLI on your VPS

The easiest and safest way to interact with other AWS services on your EC2 instance (or VPS of choice) is via the AWS CLI. This is easily installed as a global Python3 library:

$ pip3 install awscli

With the CLI installed we’ll be able to do something truly magical: set our AWS configuration globally. This means that any time we use interact with a microservice (such as S3), the boto3 library will always look to the files stored in ~/.aws/ for our keys and secrets, without us specifying. This critical from a security perspective as it removes all mentions of credentials from our codebase: including the location of said secrets.

#nodejs #aws #expressjs #javascript #node