Чтение одной строки CSV на L oop дюймов Python - PullRequest
0 голосов
/ 26 мая 2020

Python3 .7 CSV

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

Итак, на первом L oop возьмите строку 1

Во второй раз, когда появится l oop, возьмите строку 2

В третий раз появится l oop вокруг возьмите строку 3 из CSV

test.csv:

How To Write Your First Article Heading,
Here's The Important Second Article Heading,
Three is The Magic Number,

скрипт:

import csv

name = 'Article Heading'


for i in range(3):

    with open ('test.csv', 'r') as file:
        reader = csv.reader(file)
        for i in range(3):
            try:
                csv_row = ' '.join(next(reader))
            except StopIteration:
                break

            articletitle = (name + ' | ' + csv_row)
            print(articletitle)

print('THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV')

ВЫШЕ ВЫШЕ:

Article Heading | How To Write Your First Article Heading 
Article Heading | Here's The Important Second Article Heading 
Article Heading | Three is The Magic Number 
Article Heading | How To Write Your First Article Heading 
Article Heading | Here's The Important Second Article Heading 
Article Heading | Three is The Magic Number 
Article Heading | How To Write Your First Article Heading 
Article Heading | Here's The Important Second Article Heading 
Article Heading | Three is The Magic Number 
THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV
[Finished in 0.3s]

ЖЕЛАЕМЫЙ ВЫВОД:

Article Heading | How To Write Your First Article Heading 
THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV
Article Heading | Here's The Important Second Article Heading 
THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV
Article Heading | Three is The Magic Number
THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV

Если люди думают, что я все испортил, я готов sh критика. Обещаю, я искал решение, но без радости.

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Итерация по строкам проста. В вашем тестовом примере вам даже действительно не нужен модуль csv, но я буду использовать ваш тестовый пример:

Код:

import csv

name = 'Article Heading'

# newline='' should be used per documentation for csv.reader.
with open ('test.csv', newline='') as file:
    reader = csv.reader(file)
    for row in reader:
        articletitle = name + ' | ' + row[0]
        print(articletitle)
        print('THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV')

Вывод:

Article Heading | How To Write Your First Article Heading
THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV
Article Heading | Here's The Important Second Article Heading
THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV
Article Heading | Three is The Magic Number
THEN WE GO OFF AND DO SOMETHING BEFORE GOING BACK FOR THE NEXT ROW IN THE CSV

РЕДАКТИРОВАТЬ

Чтобы перебирать столбцы, прочтите все данные и перенесите столбцы в строки:

test.csv:

1,4,7
2,5,8
3,6,9

Код :

import csv

name = 'Article Heading'

# newline='' should be used per documentation for csv.reader.
with open ('test.csv', newline='') as file:
    rows = list(csv.reader(file))

columns = zip(*rows) # transpose rows/columns

for column in columns:
    for item in column:
        article_title = f'{name} | {item}'
        print(article_title)

Вывод:

Article Heading | 1
Article Heading | 2
Article Heading | 3
Article Heading | 4
Article Heading | 5
Article Heading | 6
Article Heading | 7
Article Heading | 8
Article Heading | 9
0 голосов
/ 26 мая 2020

проблема в том, что для чтения файла csv вы используете list(csv.reader(infile))

csv.reader(infile) является итератором и будет go построчно в вашем файле.

Если Я правильно понял ваш вопрос, вы можете решить свою проблему двумя способами. 1012 * (Вам необходимо обработать исключение StopIteration, если файл csv содержит менее 5 строк)

Или вы можете go через каждую строку файла csv и прервать его после 5-й итерации l oop :

with open ('test.csv', 'r') as file:
    reader = csv.reader(file)
    for i, line in enumerate(reader):
        if i == 5:
            break
        row = ' '.join(line)
        print(row)

В этом решении нет необходимости обрабатывать какие-либо исключения, но если вы хотите прервать l oop после 5-й итерации, вам нужно иметь некоторый оператор if, чтобы увидеть, какая итерация выполняется в данный момент.

...