0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 20

Работа с текстовыми файлами .txt в Python

17.02.2013, 13:40. Показов 15031. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу решить задачки, кто может помочь?
В первой строке файла start.txt находится количество рабочих дней в месяце. Далее для каждого работника в файле записано по две строки: в первой – фамилия работника, во второй – два числа – количество отработанных дней и месячный оклад.
1. Написать функцию Calc для вычисления зарплаты каждого работника по формуле: Зарплата=(Отработанные дни*оклад)/Кол-во дней в месяце. С округлением значения до двух десятичных знаков. Функция должна также подсчитать итоговую зарплату.
2. Написать функцию Save для выгрузки в файл ведомости заработной платы в виде таблицы: Фамилия--Дни--Оклад--Зарплата. Ширина колонок: «Фамилия» – 40 символов, «Дни» – 3 символа, «Оклад» и «Зарплата» – по 10 символов. Фамилию необходимо выравнивать по левому краю, цифры – по правому. Зарплату выводить с двумя десятичными знаками.
3. Написать функцию SortByName для сортировки списка работников по алфавиту.
4. В основной программе: загрузить список из файла, рассчитать зарплату, выгрузить ведомость в файл Pay.txt, отсортировать список по алфавиту, выгрузить ведомость в файл ByName.txt.
Кто может решить хотя бы некоторые задания, помогите пожалуйста, я в этом деле новичок и просто не успеваю освоить столько материала.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2013, 13:40
Ответы с готовыми решениями:

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

Работа с текстовыми файлами Python
Есть определённый текстовый файл с текстом, нужно считывать до точки(".") и добавлять считанную строку в список, считывать пока не...

Работа с текстовыми файлами .txt
Добрый день. Помогите пожалуйста, нужно, чтобы после записи в файл очередного массива шел перевод строки, т.е. каждый новый массив...

12
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 20
17.02.2013, 13:57  [ТС]
Кстати вот сам файл
Вложения
Тип файла: txt start.txt (117 байт, 152 просмотров)
0
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 20
17.02.2013, 16:08  [ТС]
С зарплатами я разобрался, вот как остальные задания сделать не могу понять. Вот решение первого задания, если кому нужно будет:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def calc():
    f=open("L:\\2_1\start.txt", "r")
    L=f.readlines()
    A=L[0][0]+L[0][1]
    A=float(A)
    F=0
    for i in range(0,12,2):
        B=L[i+2][0]+L[i+2][1]
        B=int(B)
        C=L[i+2][3]+L[i+2][4]+L[i+2][5]+L[i+2][6]+L[i+2][7]
        C=int(C)
        D=C*B/A
        F=F+D
        print round(D,2)
    print F
    f.close()
calc()
0
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 966
Записей в блоге: 16
17.02.2013, 18:29
Цитата Сообщение от Coock Посмотреть сообщение
3. Написать функцию SortByName для сортировки списка работников по алфавиту.
Python
1
2
3
4
5
6
7
8
9
10
def SortByName():
    name = []
    fp = open("start.txt").read().split("\n")
    number_work_day = fp[0]
    del[fp[0]]
    for x in range(0, len(fp), 2):
        name.append(fp[x])
    name.sort()
    [print (x) for x in name]
SortByName()
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.02.2013, 02:57
Цитата Сообщение от bodrich Посмотреть сообщение
Python
1
[print (x) for x in name]
лучше так не делать - создаётся какой-то список None'ов в памяти, зачем это надо
1
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
18.02.2013, 03:32
Цитата Сообщение от accept Посмотреть сообщение
лучше так не делать - создаётся какой-то список None'ов в памяти, зачем это надо
Я достаточно часто использую конструкцию:
Python
1
any(map(print, iterable)) # или starmap, если необходимо
для печати списков, по моему, вполне читабельно выглядит
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.02.2013, 04:34
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> lst = [1, 2, 3, 4]
>>> any(map(print, lst))
1
2
3
4
False
>>> 
>>> 
>>> lst = [1, 2, 3, 4]
>>> print(*lst, sep='\n')
1
2
3
4
>>>
Цитата Сообщение от pyuser Посмотреть сообщение
Я достаточно часто использую конструкцию:
ну, во втором так не сделаешь, так как оператор

а то, что bodrich делает, просто создаёт список (на это уходит время и память), а потом тут же его удаляет
1
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 20
18.02.2013, 16:28  [ТС]
Спасибо всем, но насчет создания лишних списков-это не имеет значения, мне нужно чтобы функция была написана пусть и с лишним кодом, но самым простым языком. Т.к. я только начал изучать Python. И еще не могли бы вы пояснить что делают операторы .read().split("\n") и зачем [print (x) for x in name] зачем все в квадратных скобках?

Добавлено через 7 минут
И он у меня почему то print выделяет и синтаксическую ошибку выдает
0
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 966
Записей в блоге: 16
18.02.2013, 17:45
Цитата Сообщение от Coock Посмотреть сообщение
.read().split("\n")
Здесь весь текст файла, "разрезается" на элементы списка. Каждая строка = отдельный элемент списка.
Цитата Сообщение от Coock Посмотреть сообщение
[print (x) for x in name]
Это генератор списков.
Цитата Сообщение от Coock Посмотреть сообщение
И он у меня почему то print выделяет и синтаксическую ошибку выдает
Это, наверное, связанно с тем, что у Вас вторая версия питона, а конструкция [print (x) for in name] актуальна только для третьего питона.
Попробуйте, строку [print (x) for x in name] заменить на
Python
1
2
for x in name:
    print x
1
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 20
18.02.2013, 18:05  [ТС]
Верно, вторая. Спасибо, заработало)

Добавлено через 10 минут
Написал код для второго задания, не подскажете как теперь сделать чтоб он выгружал файл и чтоб выравнивание делал как в задании?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def Save():
    f=open("L:\\2_1\start.txt", "r")
    L=f.readlines()
    A=L[0][0]+L[0][1]
    A=float(A)
    F=0
    print "+----------------------+---+----------+----------+"
    print "|        Фамилия       |Дни|  Оклад   | Зарплата |"
    print "+----------------------+---+----------+----------+"
    for i in range(0,12,2):
        B=L[i+2][0]+L[i+2][1]
        B=int(B)
        C=L[i+2][3]+L[i+2][4]+L[i+2][5]+L[i+2][6]+L[i+2][7]
        C=int(C)
        Z=C*B/A
        F=F+Z
        S=L[i+1][0]+L[i+1][1]+L[i+1][2]+L[i+1][3]+L[i+1][4]+L[i+1][5]+L[i+1][6]+L[i+1][7]
        D=L[i+2][0]+L[i+2][1]
        O=L[i+2][3]+L[i+2][4]+L[i+2][5]+L[i+2][6]+L[i+2][7]
        print "|",S,"|",D,"|",O,"|",round(Z,2),"|"
        f.close()
    print "+----------------------+---+----------+----------+"
    print "|Итого                                | ",F,"|"
    print "+-------------------------------------+----------+"
Save()
0
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 966
Записей в блоге: 16
18.02.2013, 19:32
Цитата Сообщение от Coock Посмотреть сообщение
чтоб выравнивание делал как в задании
Вам нужно форматирование строк. К примеру вот так делается запись в поле из 5 символов:
Python
1
2
3
4
5
6
>>> a = 100
>>> print("%5d" % a)
  100
>>> a = 2345
>>> print("%5d" % a)
 2345
1
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 20
19.02.2013, 16:55  [ТС]
Цитата Сообщение от bodrich Посмотреть сообщение
Вам нужно форматирование строк. К примеру вот так делается запись в поле из 5 символов:
Python
1
2
3
4
5
6
>>> a = 100
>>> print("%5d" % a)
  100
>>> a = 2345
>>> print("%5d" % a)
 2345
Сделал проще через
Python
1
print "|",str(S).ljust(40),"|",str(D).rjust(3),"|",str(O).rjust(10),"|",str(round(Z,2)).rjust(10),"|"
Добавлено через 5 часов 7 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def Save():
    f=open("L:\\2_1\start.txt", "r")
    L=f.readlines()
    A=L[0][0]+L[0][1]
    A=float(A)
    F=0
    print "+------------------------------------------+-----+------------+------------+"
    print "|                  Фамилия                 | Дни |   Оклад    |  Зарплата  |"
    print "+------------------------------------------+-----+------------+------------+"
    for i in range(0,12,2):
        B=L[i+2][0]+L[i+2][1]
        B=int(B)
        C=L[i+2][3]+L[i+2][4]+L[i+2][5]+L[i+2][6]+L[i+2][7]
        C=int(C)
        Z=C*B/A
        F=F+Z
        S=L[i+1][0]+L[i+1][1]+L[i+1][2]+L[i+1][3]+L[i+1][4]+L[i+1][5]+L[i+1][6]+L[i+1][7]
        D=L[i+2][0]+L[i+2][1]
        O=L[i+2][3]+L[i+2][4]+L[i+2][5]+L[i+2][6]+L[i+2][7]
        print "|",str(S).ljust(40),"|",str(D).rjust(3),"|",str(O).rjust(10),"|",str(round(Z,3)).rjust(10),"|"
        f.close()
    print "+------------------------------------------+-----+------------+------------+"
    print "|Итого                                                        |   ",F,"|"
    print "+------------------------------------------+-----+------------+------------+"
fp=open("L:\\2_1\stop.txt", "w")
fp.write(Save())
fp.close()
Вот я написал функцию, кто может помочь сделать так, чтоб он ее не на экран выводил, а в файл выгружал. Вообще процесс создания и записи в новы файл я знаю, но конкретно для этой функции никак не получается
0
110 / 36 / 5
Регистрация: 27.12.2012
Сообщений: 130
19.02.2013, 18:33
Вроде бы уже советовали открывать файлы и записывать их с with open('/файл.txt', 'w') as fout: + когда печатаешь, надо указывать, что печатать надо в файле (print >> fout,), а не выводить на экран (print).

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
with open(chemin + '/stop.txt', 'w') as fout:
    f=open("L:\\2_1\start.txt", "r")
    L=f.readlines()
    A=L[0][0]+L[0][1]
    A=float(A)
    F=0
    print >>fout, "+------------------------------------------+-----+------------+------------+"
    print >>fout, "|                  Фамилия                 | Дни |   Оклад    |  Зарплата  |"
    print >>fout, "+------------------------------------------+-----+------------+------------+"
    for i in range(0,12,2):
        B=L[i+2][0]+L[i+2][1]
        B=int(B)
        C=L[i+2][3]+L[i+2][4]+L[i+2][5]+L[i+2][6]+L[i+2][7]
        C=int(C)
        Z=C*B/A
        F=F+Z
        S=L[i+1][0]+L[i+1][1]+L[i+1][2]+L[i+1][3]+L[i+1][4]+L[i+1][5]+L[i+1][6]+L[i+1][7]
        D=L[i+2][0]+L[i+2][1]
        O=L[i+2][3]+L[i+2][4]+L[i+2][5]+L[i+2][6]+L[i+2][7]
        print >>fout, "|",str(S).ljust(40),"|",str(D).rjust(3),"|",str(O).rjust(10),"|",str(round(Z,3)).rjust(10),"|"
        f.close()
    print >>fout, "+------------------------------------------+-----+------------+------------+"
    print >>fout, "|Итого                                                        |   ",F,"|"
    print >>fout, "+------------------------------------------+-----+------------+------------+"
Примерно так...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2013, 18:33
Помогаю со студенческими работами здесь

Проект работающий с текстовыми файлами .txt
Помогите пожалуйста (!!!) создать VB-проект с меню на главной форме,содержащим команды открытия,закрытия и сохранения текстовых файлов .txt...

Python 3 задача с текстовыми файлами
Имеется текстовый файл shop_1.txt, содержащий список товаров, их количество и стоимость единицы товара. Составить программу, которая...

Работа с текстовыми файлами
в задаче А текст должен вводиться из файла “InputFile_A.txt”, а выводиться на экран и в файл “OutputFile_A.txt”. А) Удалить из текста...

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

РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ
Входной файл сохраняет следующую информацию по студентам: <Фамилия>, <имя>, <отчество>, <год рождения>, <курс>,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru